我有一个奇怪的问题,涉及使用 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 驱动程序。
请帮忙。