- 已解决 - 原来我们的Shareplow安装出现问题 - 感谢您的尝试 -
根据Performance of MySQL Insert statements in Java: Batch mode prepared statements vs single insert with multiple values的答案,我正在尝试使用批量插入准备的语句。问题是,只插入了第一行。
我的代码的相关部分
var sql2 = 'INSERT INTO ' + memtable2 + ' (' + locNameCol2 + ', ' + sectTypeCol + ', '
+ sectPathCol + ') VALUES ';
var cntr = 0;
for (var key in polyObj)//pass sub section paths in an object.
{
if(cntr){
sql2 += ',';
}
sql2 += '(?,?,?)';
cntr = 1;
}
var s2 = con2.prepareStatement(sql2);
cntr = 0;
for (var key in polyObj)
{
indxOffset = 3*cntr;
s2.setString(indxOffset+1 , fieldNameVal);
s2.setString(indxOffset+2 , 'Poly');
s2.setString(indxOffset+3 , polyObj[key]);
rval += 'index offset ' + indxOffset;
cntr++;
}
s2.execute();
第一行插入正常但没有插入后续行。当我转储sql2字符串时,我发现它正在为polyObj中的属性数正确构建(我认为)。因此,如果polyObj有3个属性,那么sql将是:
Insert into table (col1, col2, col3) values (?,?,?),(?,?,?),(?,?,?)
我的数据库上是否有一些设置会阻止多行插入?我只是做错了吗?完全难倒。
提前致谢。
答案 0 :(得分:1)
考虑使用带有executeBatch()的PreparedStatement。
String sql = "insert into foo (x,y,z) values (?,?,?)
PreparedStatement ps = connection.prepareStatement(sql);
ps.setObject(1, "a1");
ps.setObject(2, "b1");
ps.setObject(3, "c1");
ps.addBatch();
ps.setObject(1, "a2");
ps.setObject(2, "b2");
ps.setObject(3, "c2");
ps.addBatch();
ps.setObject(1, "a3");
ps.setObject(2, "b3");
ps.setObject(3, "c3");
ps.addBatch();
ps.executeBatch();