gpt4 book ai didi

java - ExecuteBatch 和 Prepared Statements 的奇怪行为

转载 作者:行者123 更新时间:2023-11-29 12:00:55 25 4
gpt4 key购买 nike

我有一个奇怪的问题涉及使用 JDBC 将大量数据放入 PostgSQL 数据库的 executeBatch 和 Prepared Statements。我使用 executeBatch 每次向数据库发送 50,000 条语句。

我知道执行批处理和准备好的语句正在运行;一些数据正在进入数据库。准备好的语句是

  INSERT INTO time ( time_id, log_id, phenomenon_time, qc_phenomenon_time )
SELECT nextval( 'time_seq' ), ?, ?, ?

并将其与执行批处理一起使用,在数据库中找到数据。

当使用下面的预处理语句时,

  INSERT INTO result_3d ( result_3d_id, time_id, variable_id, value, qc_value ) 
SELECT nextval( 'result_3d_seq' ), ( SELECT t.time_id
FROM time t
WHERE t.log_id = ?
AND t.phenomenon_time = ? ), ?, ?, ?

执行批处理时数据库中没有数据。我什至打开了数据库日志记录,并找到了第一个的所有内容,但没有找到第二个。第二条准备好的语句依赖于第一条的数据,但数据库甚至看不到第二条。

没有抛出异常。唯一奇怪的是,对于第二个准备好的语句,返回的数组大小为零。执行批处理立即返回。第二个准备好的语句中的子查询是否允许?

我使用 postgres-9.1-901.jdbc4.jar 作为针对 PostgreSQL v8.3.19 数据库的 JDBC 驱动程序。

请帮忙。

最佳答案

我将回答我自己的问题,因为我描述的症状与执行批处理或准备好的语句无关。在一些重构过程中,我遗漏了一个关键语句。

this.preparedStatement.addBatch();

所以这是我的错。这些症状完美地描述了缺少语句的代码的行为。

感谢您在评论中付出的努力。有些给了我新的学习领域。谢谢欧文。

关于java - ExecuteBatch 和 Prepared Statements 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11167471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com