gpt4 book ai didi

java - 尽管查询在其他地方工作,SqlitePreparedStatement 不返回结果集

转载 作者:行者123 更新时间:2023-11-30 05:48:35 25 4
gpt4 key购买 nike

我遇到了一个问题,我收到了一个空的 ResultSet对于我知道适用于给定数据库的查询。

该数据库(截断并匿名)如下:

-- Table: places
CREATE TABLE places (id INTEGER PRIMARY KEY AUTOINCREMENT, venue_id INTEGER, timestamp INTEGER, venue_name TEXT);
INSERT INTO places (id, venue_id, timestamp, venue_name) VALUES (1, 1, 1533231909000, 'Place 1');
INSERT INTO places (id, venue_id, timestamp, venue_name) VALUES (2, 2, 1533231909000, 'Place 2');
INSERT INTO places (id, venue_id, timestamp, venue_name) VALUES (3, 1, 1533231911000, 'Place 1');
INSERT INTO places (id, venue_id, timestamp, venue_name) VALUES (4, 1, 1533232901300, 'Place 1');
INSERT INTO places (id, venue_id, timestamp, venue_name) VALUES (5, 2, 1533233301300, 'Place 2');
INSERT INTO places (id, venue_id, timestamp, venue_name) VALUES (6, 3, 1533245000000, 'Place 3');
-- Table: opening_times
CREATE TABLE opening_times (id INTEGER PRIMARY KEY AUTOINCREMENT, venue_id INTEGER, timestamp INTEGER);
INSERT INTO opening_times (id, venue_id, timestamp) VALUES (1, 1, 1546300836000);
INSERT INTO opening_times (id, venue_id, timestamp) VALUES (2, 2, 1546300840000);
INSERT INTO opening_times (id, venue_id, timestamp) VALUES (3, 1, 1546300840000);
INSERT INTO opening_times (id, venue_id, timestamp) VALUES (4, 1, 1533231911000);
INSERT INTO opening_times (id, venue_id, timestamp) VALUES (5, 1, 1533232011000);
INSERT INTO opening_times (id, venue_id, timestamp) VALUES (6, 3, 1533232011000);
INSERT INTO opening_times (id, venue_id, timestamp) VALUES (7, 2, 1533232011000);

我的代码正在生成以下 SQL 命令(尽管打印不漂亮)

SELECT DISTINCT p.venue_name,
q.changes
FROM (SELECT COUNT(*) - 1 AS changes,
venue_id,
timestamp
FROM opening_times t
GROUP BY t.venue_id) q
JOIN places p
ON q.venue_id = p.venue_id
WHERE q.changes > 0
AND q.timestamp >= 0
AND q.timestamp < 1633232011000
ORDER BY q.changes DESC,
p.venue_name ASC;

在 SQLite 数据库编辑器程序中使用此查询(也在 this SQLFiddle 中执行)会返回正确的结果,例如

| venue_name | changes |
|------------|---------|
| Place 1 | 3 |
| Place 2 | 1 |

但是,我的 Java 代码没有为相同数据库获得相同的结果。

Class.forName("org.sqlite.JDBC");
Connection connection = DriverManager.getConnection(url);
connection.setAutoCommit(true);

String sql = "..."; // See above
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();

while(resultSet.next()) {
// Code here never executes at present as nothing is returned in the result set
}

我已经准备好了很多 SO 帖子,据我所知,我遵循了正确的步骤才能正确获取数据。其他不太复杂的查询工作得很好,只是这个特定的查询目前无法返回数据。

我也在使用 Java 8 和 org.xerial:sqlite-jdbc版本 3.25.2 连接到数据库(如果这会产生任何影响)。

最佳答案

此问题已通过恢复到 org.xerial:sqlite-jdbc:3.21.0.1 得到解决

我在 OSX 10.14 计算机上遇到了此问题,但更高版本 3.25.2 似乎适用于 Windows 和 Linux 上的其他用户。

关于java - 尽管查询在其他地方工作,SqlitePreparedStatement 不返回结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54403171/

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