gpt4 book ai didi

java - 如何重用取决于执行结果的PreparedStatement

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

我的目标是:

我有一个 SELECT 查询,我想在有很多行的数据库上运行它。这个查询会产生很多结果,所以我想在 LIMIT 1000OFFSET ? 的迭代中运行它,其中 ? 将是每次迭代中处理的最后一行。

例如:

  • 获取第 1 - 1000 行
  • 获取第 1001 - 2000 行
  • 获取第 2001 - 3000 行
  • 获取第 3001 - 4000 行
  • ...

我正在考虑在循环中执行此操作,其中每次新迭代都会将最后一次迭代的行设置为新迭代的 OFFSET(例如:OFFSET 1001OFFSET 2001等如上所示)。

我刚开始使用 JDBC,所以这是正确的方法吗?如果是这样,当我必须执行 PreparedStatement 并获取每次迭代的结果时,如何重用它?

如果这不是正确的方法,那么正确的方法是什么?

编辑:这是我当前的代码:

private static void import(Date from, Date to) throws Exception {

PreparedStatement p = connect.prepareStatement(statement);
p.setInt(1, 0);
p.add
ResultSet results;
for (int i=0; i< WAVES; i++) {
results = p.executeQuery();
Integer lastRow = importFrom(results);
p.setInt(1, lastRow.intValue()+1);
results.close();
}
p.close();
}

编辑 2:这是 SQL 字符串:

SELECT 
item.aitem_id, item.action_type, item.user_id, item.pid, item.pr_id, item.action_time, item.notes, item.screen, item.vid, item.lo_id,
vals.value_name, vals.simple_int_value, vals.simple_double_value, vals.simple_date_value, vals.simple_string_value,
data.version_id, data.prev_version_id
FROM mySchema.aitems item
JOIN mySchema.avalues vals ON item.aitem_id=vals.aitem_id
JOIN mySchema.adata data ON item.aitem_id=data.aitem_id
LIMIT 1000 OFFSET ?;

我修改了我的代码和 SQL 以仅使用 OFFSET 进行准备。

最佳答案

您的做法是正确的,但最好添加对 clearParameters() 的调用并使用 try finally block 。下面是我将如何实现它

PreparedStatement p = null;
ResultSet results = null;
Integer lastRow = 0;
try
{
p = connect.prepareStatement(statement);
p.add

for (int i=0; i< WAVES; i++)
{
p.clearParameters();
p.setInt(1,lastRow.intValue() + 1)
try // This try might not really be necessary
{
results = p.executeQuery();
Integer lastRow = importFrom(results);
p.setInt(1, lastRow.intValue()+1);
} // Add dealing with exceptions
finally
{
results.close();
}
}
} //Add dealing with exceptions
finally
{
p.close();
}

关于java - 如何重用取决于执行结果的PreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905713/

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