我的目标是这样的:
我有一个SELECT
查询,我想在有很多行的数据库上运行。这个查询会产生很多结果,所以我想在迭代中运行它,每次迭代中处理的最后一行LIMIT 1000
在OFFSET ?
哪里。?
例如:
- 获取第 1 - 1000 行
- 获取第 1001 - 2000 行
- 获取行 2001 - 3000
- 获取行 3001 - 4000
- ...
我正在考虑在循环中执行此操作,其中每个新迭代都将最后一次迭代的行设置为新迭代的行OFFSET
(例如:OFFSET 1001
,,OFFSET 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
.