2010-09-14 72 views
0

這是在Java一份聲明中正確的語法:的Java的PreparedStatement語法

INSERT INTO table (id, version, data) 
    VALUES (?, ?, ?) 
    ON DUPLICATE KEY UPDATE 
    data = IF(version > values(version), data, values(data)), 
    version = IF(version > values(version), version, values(version)) 

我正在尋找最好的方式從一個for循環在Java中利用內插入或更新百萬行PreparedStatement的addBatch。

+1

沒有「在Java準備好的語句的語法」 。在SQL中有一個準備語句的語法。到Java它只是一個字符串。 – EJP 2010-09-14 04:07:50

+0

我說的是問號和'values(version)'......顯然這是sql語法,但是準備好的語句會做某種形式的解析嗎? – 2010-09-14 21:21:31

回答

2

如果SQL語句是正確的,你需要用它,如下所示:

String sql = ... 
PreparedStatement prep; 
prep = conn.prepareStatement(sql); 
prep.setInt(1, x); 
prep.setString(2, y); 
prep.setString(3, z); 
prep.execute(); 

要使用addBatch,用途:

String sql = ... 
PreparedStatement prep; 
prep = conn.prepareStatement(sql); 
for (...) { 
    prep.setInt(1, x); 
    prep.setString(2, y); 
    prep.setString(3, z); 
    prep.addBatch(); 
} 
prep.execute(); 
+0

托馬斯,我得到了這部分,但我的問題是,是否SQL語法是正確的..你知道如何準備語句解析問號..我只是想知道'值(數據)'是正確的方式來說'使用無論什麼價值傳遞給數據列' – 2010-09-14 21:23:08

+0

我會繼續,並給你信貸的答案,即使它沒有回答我的確切問題。我想我的錯在於我原來的問題不太清楚。 – 2010-09-16 23:34:17