gpt4 book ai didi

java: 结果集错误

转载 作者:行者123 更新时间:2023-12-01 22:19:40 26 4
gpt4 key购买 nike

我正在编写一个 Java 代码,用于验证和更新我的收入报告工具的登录凭据。

getName() 是询问用户名,然后交叉检查数据库中是否有重复条目并相应添加的函数。

我的问题是,当我在开始时提供不同的名称时,它会起作用并将该名称添加到数据库中。但是,当我提供重复的名称,然后提供不同的名称时,会出现以下错误:

Exception in thread "main" java.sql.SQLException: Operation not allowed after ResultSet closed
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:804)
at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6986)
at database_console1.test2.getName(test2.java:67)
at database_console1.test2.getName(test2.java:74)
at database_console1.test2.getName(test2.java:74)
at database_console1.test2.getName(test2.java:74)
at database_console1.test2.getName(test2.java:74)
at database_console1.test2.getName(test2.java:74)
at database_console1.test2.main(test2.java:44)
Java Result: 1
BUILD SUCCESSFUL (total time: 20 seconds)

这是我的函数。

public void getName() throws SQLException {         
String sqla = "SELECT * FROM veuser where UserName = ?" ;
String sql = "INSERT INTO veuser (UserName) VALUES (?)";
boolean b = true;
while (b) {
System.out.println("Enter your username");
name = sc.nextLine();
if (!"".equals(name)) {
b = false;
} else {
System.out.println("Username cant be left blank");
}
}


ps = conn.prepareStatement(sqla);
ps.setString(1, name);
rs = ps.executeQuery();
while (rs.next()) {

String i = rs.getString(2);
System.out.println(i);

if (i.equals(name)) {
System.out.println("User already exists.Choose another username");
getName();

}
}

os = conn.prepareStatement(sql);
os.setString(1, name);
int row = os.executeUpdate();
if (row > 0){
System.out.println("Successfully added...");
ps.close();
os.close();
}

最佳答案

您的代码是递归的。您从自身调用函数 getName(),但在它返回后,第一次调用将继续执行。

例如,假设您的用户名是 John,并且您到达了这一行:

if (i.equals(name)) {
System.out.println("User already exists.Choose another username");
getName();

}

用户名 John 已存在,您再次调用 getName()。您在第二次调用中将名称设置为正确的名称。然后,在第二次调用中插入该行并返回到第一次调用,尝试再次插入相同的名称。如果您尝试使用 3-4 个不同的名称并且全部失败,它将尝试在最后执行 3-4 次插入。

您不应再次调用 getName(),而应构造 if-else 逻辑以返回到方法的开头。

关于java: 结果集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30161567/

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