MySQL - ResultSet.updateString() java.sql.SQLException: 找不到列
MySQL - ResultSet.updateString() java.sql.SQLException: Column not found
我正在尝试从 mu 数据库中的某个 table 中提取 select 行,并根据结果更新我的 table。经过大量研究,似乎 updateString() 和 updateRow() 是可行的方法。这是我的代码,请注意 state
是 Statement
类型的全局变量:
public void updateMyRows(Connection conn){
try {
int id;
String firstName, lastName, userName, pwd;
state = conn.createStatement();
String sql = "SELECT idP, firstName, lastName, salt FROM PERSON";
ResultSet rs = state.executeQuery(sql);
while (rs.next()){
id = rs.getInt("idP");
firstName = rs.getString("firstName");
lastName = rs.getString("lastName");
userName = UserNamePwd.userNameGen(lastName, firstName, id);
pwd = UserNamePwd.passWordGen(lastName, firstName, id);
rs.updateString("userName", userName);
rs.updateString("pwd", pwd);
rs.updateRow();
}
rs.close();
state.close();
} catch (Exception e){
e.printStackTrace();
}
}
这样做会给我这个错误:
java.sql.SQLException: Column 'userName' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1077)
at com.mysql.jdbc.ResultSetImpl.updateString(ResultSetImpl.java:7788)
at AddUsersToDB.addUserNamesAndHash(AddUsersToDB.java:79)
at AddUsersToDB.main(AddUsersToDB.java:96)
然而 'userName' 是我要更新的其中一列的确切名称...发生了什么事?
您需要 select 查询中的 userName
和 pwd
列,以便这些列在结果集中可用。我可能会在这里使用 SELECT *
来获取所有可用的列,尽管您可以将 userName
和 pwd
添加到 select 列表中。
String sql = "SELECT * FROM PERSON";
ResultSet rs = state.executeQuery(sql);
while (rs.next()) {
id = rs.getInt("idP");
firstName = rs.getString("firstName");
lastName = rs.getString("lastName");
userName = UserNamePwd.userNameGen(lastName, firstName, id);
pwd = UserNamePwd.passWordGen(lastName, firstName, id);
rs.updateString("userName", userName);
rs.updateString("pwd", pwd);
rs.updateRow();
}
您在 select sql 中遗漏了用户名和密码。
应该是:
字符串 sql = "SELECT idP, firstName, userName, pwd, lastName, salt FROM PERSON";
我正在尝试从 mu 数据库中的某个 table 中提取 select 行,并根据结果更新我的 table。经过大量研究,似乎 updateString() 和 updateRow() 是可行的方法。这是我的代码,请注意 state
是 Statement
类型的全局变量:
public void updateMyRows(Connection conn){
try {
int id;
String firstName, lastName, userName, pwd;
state = conn.createStatement();
String sql = "SELECT idP, firstName, lastName, salt FROM PERSON";
ResultSet rs = state.executeQuery(sql);
while (rs.next()){
id = rs.getInt("idP");
firstName = rs.getString("firstName");
lastName = rs.getString("lastName");
userName = UserNamePwd.userNameGen(lastName, firstName, id);
pwd = UserNamePwd.passWordGen(lastName, firstName, id);
rs.updateString("userName", userName);
rs.updateString("pwd", pwd);
rs.updateRow();
}
rs.close();
state.close();
} catch (Exception e){
e.printStackTrace();
}
}
这样做会给我这个错误:
java.sql.SQLException: Column 'userName' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1077)
at com.mysql.jdbc.ResultSetImpl.updateString(ResultSetImpl.java:7788)
at AddUsersToDB.addUserNamesAndHash(AddUsersToDB.java:79)
at AddUsersToDB.main(AddUsersToDB.java:96)
然而 'userName' 是我要更新的其中一列的确切名称...发生了什么事?
您需要 select 查询中的 userName
和 pwd
列,以便这些列在结果集中可用。我可能会在这里使用 SELECT *
来获取所有可用的列,尽管您可以将 userName
和 pwd
添加到 select 列表中。
String sql = "SELECT * FROM PERSON";
ResultSet rs = state.executeQuery(sql);
while (rs.next()) {
id = rs.getInt("idP");
firstName = rs.getString("firstName");
lastName = rs.getString("lastName");
userName = UserNamePwd.userNameGen(lastName, firstName, id);
pwd = UserNamePwd.passWordGen(lastName, firstName, id);
rs.updateString("userName", userName);
rs.updateString("pwd", pwd);
rs.updateRow();
}
您在 select sql 中遗漏了用户名和密码。
应该是:
字符串 sql = "SELECT idP, firstName, userName, pwd, lastName, salt FROM PERSON";