【发布时间】:2018-05-09 12:11:46
【问题描述】:
我正在使用以下查询对我的表格进行分页。
select *
from TABLE_NAME
LIMIT 4 OFFSET 10
我的表有 12 行。当我从 Squirrel 运行这个查询时,它会返回响应,但是当我使用 JDBC 连接来获取它时,它不会返回数据。
如果我使用 LIMIT AS 14 AND OFFSET 4,相同的查询可以正常工作。(我的 JDBC 没有问题)。
Java 代码:
List<DataPoolEntity> list = new ArrayList<>();
try {
String fetch = "select * from TABLENAME LIMIT " + limit + " OFFSET " + offset;
java.sql.PreparedStatement stmt = conn.prepareStatement(fetch);
java.sql.ResultSet result = stmt.executeQuery();
list = generateDataPoolEntityList(result); (custom code) - ignore this
result.close();
stmt.close();
return list;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
【问题讨论】:
-
limit和offset没有order by是没有意义的 - 难怪你没有得到你所期望的。如果它在您的 Java 代码中不起作用,您还必须向我们展示 Java 代码。 -
我也有订单,我的完整查询:select * from TABLE_NAME LIMIT 4 OFFSET 10 ORDER BY ID
-
未返回数据(或未返回数据),通常意味着您正在连接到不同的数据库,或者您正在查看在当前事务中创建且尚未提交的数据,因此对其他事务不可见。另外,如果我使用 LIMIT AS 14 AND OFFSET 4,“工作正常” 是什么意思?如图所示,子句是语法错误。
-
我的实际查询:select * from TABLE_NAME ORDER BY ID LIMIT 4 OFFSET 10
-
在 Squirrel(基于 JDBC)或直接在 JDBC 中运行查询没有区别。您可能正在连接到不同的数据库/数据集,或者您的 Squirrel 连接在表中有未提交的行。