相关疑难解决方法(0)

带有rewriteBatchedStatements = true的MySQL和JDBC

我一直在这里,这里,这里这里阅读使用的优点rewriteBatchedStatements=true

如果我理解正确的话,rewriteBatchedStatements=trueJDBC会将尽可能多的查询打包到一个网络数据包中,从而降低网络开销.我对吗?

然后我注意到MySQL服务器中定义的值max_allowed_packet可能会导致查询出现问题(查询未在服务器上执行).

所以我的第二个问题是,JDBC是否知道分配给它的值max_allowed_packet,因此使数据包小于定义的值,max_allowed_packet或者是开发人员必须考虑的内容?

如果我理解错了,请告诉我.

java mysql sql jdbc

47
推荐指数
1
解决办法
3万
查看次数

JDBC批量插入异常处理

我每次执行程序时都在执行JDBC批量插入(一次插入大约1000行).但是我无法正确处理某些记录引发的异常.

假设,1000条记录中的第100条记录因为数据无效或某些值的大小超出列大小而抛出异常.一旦发生异常,其余的记录就不会被插入,程序就会失败.

我想要的是即使第100条记录抛出异常,其余的插入也应该在我的程序结束之前照常进行.

我无法理解如何实现这一目标.请建议.

编辑:

这是我在我的应用程序中用于批量插入的示例代码.假设结果集有大约1000条记录.

PreparedStatement ps = null;
while(rs.next()){
  //Retrieve the value and set it to a Prepared statement

  String name = rs.getString("Name");
  int age = rs.getInt("Age");
  ps.setInt(1, age);
  ps.setString(2, name);

  //Finally invoke addBatch
  ps.addBatch();
}

//Finally call the executeBatch method
ps.executeBatch();
Run Code Online (Sandbox Code Playgroud)

如果第100条记录抛出异常,那么我想仅从第100条第1000条记录触发该进程.是否有某种方式来做到这一点,这样我可以重新开始从中抛出异常的记录过程中直到再次结束了吗?怎么做到这一点?

java sql oracle jdbc oracle10g

20
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×2

jdbc ×2

sql ×2

mysql ×1

oracle ×1

oracle10g ×1