У меня есть пользователи, пытающиеся зарегистрироваться на сайте. прежде чем они смогут зарегистрировать свое имя пользователя, поиск выполняется в базе данных SQL, чтобы убедиться, что его еще не существует.
проблема в том, что имена никогда не ищутся, потому что ResultSet всегда возвращает пустое значение. Я думаю, что это подготовленное заявление.
Я думаю, что мое подготовленное заявление не выполняется. Я использую executeQuery()
, чтобы выполнить свое утверждение, потому что именно так я без проблем вставляю имена пользователей. Я получил часть результатов поиска if (rs.next())...
из метода, который вставляет имена пользователей. То же самое с String SQL
и подготовленным оператором.
String SQL = "SELECT * FROM users WHERE username='" + getUsername() + "'";
System.out.println(SQL);
// prints out SELECT * FROM users WHERE username='whatever I searched'
// so this String is valid
if (db.getConn() != null){
System.out.println("connected to database");
// always prints
}
PreparedStatement preparedStatement = db.getConn().prepareStatement(SQL);
// preparedStatement.setString(1, getUsername());
ResultSet rs = preparedStatement.executeQuery();
// userNameCounter = rs.getString("username");
// putting this here returns an sqlexception. empty set
if (preparedStatement != null){
System.out.println("ps != null");
// prints this
}
if (rs != null){
System.out.println("rs != null");
// prints this
}
if (!rs.next()){
System.out.println("!rs.next");
// prints this
}
if (rs.next()) {
userNameCounter = rs.getString("username");
System.out.println("rs.next()");
// doesn't print
// so the resultset is empty
if (!userNameCounter.equals(getUsername())) {
System.out.println("that username is unique");
return true;
}
}
preparedStatement.close();
incorrectLabels.setText("That username is already taken");
incorrectLabels.setVisible(true);
System.out.println("that username is already there");
// this always prints. it shouldn't
return false;
Так что executeUpdate()
требует int
, но я не уверен, что бы я туда поместил. И просто execute()
выдает ошибку Requires ResultSet found boolean
. Я не думаю, что есть какие-либо синтаксические ошибки, так как таблица называется users
. Все, что я пробую, просто возвращает меня к ошибке, возникающей из-за пустого набора. дайте мне знать, если вам нужно больше кода, но именно здесь происходит ошибка.
Спасибо!