У меня проблема с получением пустого 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 для подключения к базе данных, если это должно сделатьлюбая разница.