日期:2014-05-20  浏览次数:20960 次

关于ResultSet,无效的游标状态
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method
String name = loginForm.getName().trim();
String password = loginForm.getPassword().trim();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connection = DriverManager.getConnection("jdbc:odbc:books_management");
Statement state = connection.createStatement();
String sql1 = "SELECT * FROM person_info WHERE name='" + name + "'";
ResultSet rs1 = state.executeQuery(sql1); // 将执行结果集放入ResultSet中
int n = 0;
while (rs1.next()) {
n++;
String tt = rs1.getString("name").trim();
if (tt != null) { // 用户名正确
String psd = ""; // 获取数据库中与姓名相对应的密码
psd = rs1.getString("password");
rs1.close();
state.close();
connection.close();
if (password.equals(psd)) {

return new ActionForward("/login_success.jsp");

} else {
return new ActionForward("/login_fail.jsp");
}
}
// 用户名不正确时
else {
return new ActionForward("/login_empty.jsp");
}

}
if (n == 0) {
return new ActionForward("/login_empty.jsp");
} else {
return null;
}
  用的是struts框架做的,返回类型是ActionForward
出现的错误是:java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
实在不知道哪里出错了,求各位帮帮忙!
ResultSet,游标

------解决方案--------------------
resultSet第一次运行的时候就关掉了,第二次循环的时候肯定出错了啊
------解决方案--------------------
吧rs1.close();
state.close();
connection.close();
这几句放到
while (rs1.next()) {循环外面
------解决方案--------------------
编程逻辑问题:
while里面只是resultset的业务数据处理,
针对数据库对象的关闭,最好放到finally处理!@