У меня есть несколько функций, которые помогают с извлечением объектов из базы данных.resultSet.next() возвращает false, даже если таблица заполнена
public User getUser(int beamID) throws NoSuchUserException {
return userFromResultSet(getUserResultSet(beamID));
}
private ResultSet getUserResultSet(int beamID) {
try(Connection conn = dataSource.getConnection()) {
// queries.getUserByBeamID() returns "SELECT * FROM user WHERE beamID=?"
PreparedStatement stmt = conn.prepareStatement(queries.getUserByBeamID());
stmt.setInt(1, beamID);
System.out.println(stmt.toString());
return stmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
throw new IllegalStateException();
}
}
private User userFromResultSet(ResultSet resultSet) {
try {
boolean next = resultSet.next(); // Debugger tells me this is false.
if (!next)
throw new NoSuchUserException();
User user = new User(this,
resultSet.getInt("beamID"),
resultSet.getString("name"),
resultSet.getInt("points"),
resultSet.getInt("time")
);
if (resultSet.next())
throw new IllegalStateException("Duplicate user entries exist - database integrity compromised!");
return user;
} catch (SQLException e) {
e.printStackTrace();
throw new IllegalStateException();
}
}
Странная вещь, я знаю, что данные действительно существует по двум причинам:
Моя программа пытается создать запись, если она не существует, но попытка, что дает что единственное ограничение не соблюдается.
Выполнение запроса в моей БД SQLite браузере работает просто отлично:
Я очень сомневаюсь, что это проблема с неподтвержденными данными, так как это база данных на основе файлов, и открытие этого файла текстовым редактором показывает экземпляры имен пользователей в данных.
«Моя программа пытается создать запись, если она не существует **, но при попытке это дает ошибку, которой не соблюдается уникальное ограничение. **« Это значит, что пользователь делает ** не существует ** (иначе он не попытается создать его, что привело бы к уникальному нарушению ограничения), но единственное ограничение, скорее всего, будет на 'id' (вместо или в дополнение к' beam_id') –