结果集总是返回空,我不应该在我的预准备语句中使用 executeQuery() 吗?



我有用户尝试注册到一个网站。 在他们注册之前,在 SQL 数据库中搜索他们选择的用户名,以确保它不存在。 问题是永远不会搜索名称,因为结果集始终返回空。我认为这是准备好的声明。

我认为我准备好的陈述没有执行。我正在使用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。我尝试的所有内容都只会让我回到由空集引起的错误。如果您需要更多代码,请告诉我,但这是错误发生的地方。

谢谢!

使用 SELECT 语句时,您正在向数据库发出查询,因此您使用 executeQuery() 方法。

看起来令人困惑的是你正在使用的用户名计数器变量。在哪里声明,声明为什么?看起来它可能是一个整数变量,这会让我问....你认为rs.getString("用户名")方法返回什么? 实际上。。。所有这些if语句的所有rs.next()条件是怎么回事?

整个事情相当混乱。如果您想查看数据库表中是否已存在用户名,那么您可以执行以下操作:

if (db.getConn() == null){
throw new RuntimeException("Method Error! You Are NOT Connected To Database!");
}
String suppliedUserName = getUsername();
String dbUserName = "";
String SQL = "SELECT username FROM users WHERE username=?";
PreparedStatement preparedStatement = db.getConn().prepareStatement(SQL);
preparedStatement.setString(1, suppliedUserName);
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
dbUserName = rs.getString("username");
}
rs.close()
preparedStatement.close()
/* Below we use the equalsIgnoreCase() method. You 
don't want a supplied User Name to be that close 
or that similar to another User Name already in 
Database. If you do then just use equals() method.  */
if (dbUserName.equalsIgnoreCase(suppliedUserName)) {
System.out.println("The User name (" + suppliedUserName + 
") is already in use. Try another User Name.");
return false;
}
else {
System.out.println("The User name (" + suppliedUserName + ") is Unique.");
return true;
}

当然,这段代码没有经过测试,我假设你已经准备好了try/catch来处理任何SQLException。我提供此代码只是为了让您了解如何完成它。

相关内容

  • 没有找到相关文章

最新更新