2010-09-14 59 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