我想创建一个以批量/集合方式而不是单例/ RBAR运行的插入语句。
我遇到了SQL语法异常,无法理解原因。
public void Insert_tag(ArrayList key, ArrayList key_tag, String[] tag, String[] make_key, String fname, int fseq, ArrayList khannTag)throws Exception{
PreparedStatement prep = Local.prepareStatement("delete from tagDB where fname=? and fseq=?;");
prep.setString(1,fname);
prep.setInt(2,fseq);
prep.execute();
String query = "insert into tagDB values (?, ?, ?, ?, ?, 0, 0, 0, ?, ?, ?)";
for(int i = 0 ; i < key.size()-1 ; i++ ) {
query = query.concat(",(?, ?, ?, ?, ?, 0, 0, 0, ?, ?, ?)");
}
System.out.println(query);
PreparedStatement prep3 = Local.prepareStatement(query); // <<<< Exception
for(int n=0 ; n<key.size() ; n++) {
prep3.setString(8*n+1, (String) key.get(n));
prep3.setString(8*n+2, (String) key_tag.get(n));
prep3.setString(8*n+3, (String) khannTag.get(n));
prep3.setString(8*n+4, tag[n]);
prep3.setString(8*n+5,make_key[n]);
prep3.setString(8*n+6,fname);
prep3.setInt(8*n+7,fseq);
prep3.setInt(8*n+8,n);
}
prep3.executeUpdate();
prep3.close();
prep.close();
}
而且,我的日志就在这里。
java.sql.SQLException: near ",": syntax error
答案 0 :(得分:1)
我将假设您正在使用SQL Server 2000或SQL Server 2005.您尝试使用的VALUES(),()
构造是在SQL Server 2008中引入的。所以您将不得不更改您正在构建的查询:
INSERT ... VALUES(), (), ();
对此:
INSERT ... VALUES();
INSERT ... VALUES();
INSERT ... VALUES();
或者:
INSERT ... SELECT
UNION ALL SELECT
UNION ALL SELECT
...
或者查看SQLBulkCopy。
或者,我想你可以升级。