【问题标题】:Insert multiple rows - java prepared statement failing [closed]插入多行 - java准备语句失败[关闭]
【发布时间】:2013-03-25 10:33:16
【问题描述】:

--已解决--原来是我们的 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 (?,?,?),(?,?,?),(?,?,?) 我的数据库上是否有一些设置会阻止多行插入?我只是做错了什么吗?完全被难住了。

提前致谢。

【问题讨论】:

  • 它不在 Groovy 中。它是一个名为 Rhino 的服务器端 JavaScript 解释器。事实证明,问题是我们的 Shareplow 安装的一个后端错误,它不允许更新多行。我不得不让我们的首席开发人员修复它。另外,我不确定 addBatch 会给我带来什么好处,因为我没有使用批量插入。我正在按照上面的链接进行批量插入。
  • PS:Java != Javascript ... ... 甚至没有接近。

标签: java javascript mysql rhino


【解决方案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();

【讨论】:

  • 而且我并没有按照我最初包含的链接使用批次。您会注意到与我在批处理中使用的方法相比,性能显着提高。
猜你喜欢
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
相关资源
最近更新 更多