我正在学习MySQL和Java,并且我正在尝试创建一个方法来获取数据库中的当前字符串并将其更改为其他字符串。
我的代码如下所示:
public void changeStatus(int taskID) throws SQLException
{
try {
// 1. Get a connection to database
myConn = DriverManager.getConnection(dbUrl, dbUser, dbPass);
// 2. Create a statement
myStmt = myConn.prepareStatement("select 'status' from tasks where id=?");
myStmt.setInt(1, taskID);
myRs = myStmt.executeQuery();
String statusString = myRs.getString("status");
if (statusString != null)
{
myStmt = myConn.prepareStatement("update tasks set status=? where id=?");
if (statusString.equals("New"))
{
myStmt.setString(1, "In Process");
myStmt.setInt(2, taskID);
myStmt.executeUpdate();
}
else if (statusString.equals("In Process"))
{
myStmt.setString(1, "Done");
myStmt.setInt(2, taskID);
myStmt.executeUpdate();
}
else if (statusString.equals("Done"))
{
myStmt.setString(1, "New");
myStmt.setInt(2, taskID);
myStmt.executeUpdate();
}
}
}
catch (Exception exc) {
exc.printStackTrace();
}
finally {
if (myRs != null) {
myRs.close();
}
if (myStmt != null) {
myStmt.close();
}
if (myConn != null) {
myConn.close();
}
}
}
它说我得到了java.sql.SQLException:在开始结果集之前。 我认为问题出在这一行:
String statusString = myRs.getString("status");
我需要做些什么才能让它发挥作用?
答案 0 :(得分:1)
在获取值之前,您必须将光标移动到下一个位置。
myRs.next();
String statusString = myRs.getString("status");
来自docs
您可以通过游标访问ResultSet对象中的数据。注意 此游标不是数据库游标。这个游标是一个指针 指向ResultSet对象中的一行数据。 最初 光标位于第一行之前。你可以调用各种方法 在ResultSet对象中定义以移动光标。
答案 1 :(得分:0)
在阅读结果集之前,您必须先调用myRs.next()
。
或者最好首先检查结果集中是否有条目:
if (myRs.hasNext()){
myRs.next()
String statusString = myRs.getString("status");
}
您的查询还有其他问题:
myStmt = myConn.prepareStatement("select 'status' from tasks where id=?");
您必须删除列名status
周围的单引号。必须是:
myStmt = myConn.prepareStatement("select status from tasks where id=?");