Java JDBC的极限

Java JDBC的极限,java,jdbc,Java,Jdbc,我正在使用java.sql.Connection.setAutoCommit(false)和java.sql.PreparedStatement.addBatch()执行一些批量插入。我猜在提交之前可以安全地执行多少正确的insert/update语句?例如,在提交之前执行100.000次插入可能会导致JDBC驱动程序投诉、内存泄漏或其他问题?我想在提交之前我可以执行多少条语句是有限制的,在哪里可以找到这样的信息?对于DML语句的数量没有限制。您推送到数据库的每个插入/更新/删除实际上只在数据库

我正在使用
java.sql.Connection.setAutoCommit(false)
java.sql.PreparedStatement.addBatch()
执行一些批量插入。我猜在提交之前可以安全地执行多少正确的insert/update语句?例如,在提交之前执行100.000次插入可能会导致JDBC驱动程序投诉、内存泄漏或其他问题?我想在提交之前我可以执行多少条语句是有限制的,在哪里可以找到这样的信息?

对于
DML
语句的数量没有限制。您推送到数据库的每个
插入/更新/删除
实际上只在数据库中跟踪。所以不会像你提到的那样出现内存泄漏。
JDBC
中的内存泄漏通常只与未关闭的结果集或准备好的语句有关


但另一方面,大量的
DML
操作没有
COMMIT
,可以在数据库中进行大量的日志记录。这可能会影响其他操作的性能。当您在数百万次
插入之后发出
提交
时,其他操作,如
索引
分析、数据复制(如果有)会给
DBMS
带来更多开销。不过,这些要点是完全特定于DBMS的<代码>JDBC
驱动程序与之无关。

您不能对此进行基准测试吗?它取决于a)你的数据b)数据库等。它取决于每个语句的大小。如果您只有5个整数列,那么您可能不会遇到问题。如果您有100个带有
varchar(1000)
的列,那么情况会有所不同。它还取决于所使用的DBMS。如果你只提交一次,有些会更快;如果你频繁提交,有些会更快。这不是事实。当使用批处理语句时,通过
addBatch()
添加的所有语句(实际上是语句的值)都由驱动程序保存在内存中,直到调用
executeBatch()
为止。在DB2中,我得到了java.sql.SQLException:超出了语句数量的限制。@a_horse_,带有_no_名称是的,我同意它们在驱动程序中。但是它们只是语句(文本),不应该给
JVM
造成开销吗?!如果任何限制都只是一个
DBMS
参数(由DBA定制?),那么如果将100.000行的数据保存在内存中,肯定会有一些“开销”。