JDBC_ResultSet结果集为空

键盘小生 发布于 2013/02/02 13:02
阅读 2K+
收藏 0

PreparedStatement处理SQL语句后,结果集为空,求指教

public class JdbcDao {

//对用户登录进行验证,若用户名已经存在,则返回true;
public boolean validate(String username) {
Connection conn = null;
boolean flag = false;
try {
// 获取数据库连接
conn = DBFactory.getConnection();
// 创建SQL执行语句
StringBuilder sql = new StringBuilder();
sql.append("select * from ruser where username=?");
// 预处理语句
PreparedStatement pstm = conn.prepareStatement(sql.toString());
// 设置参数1--->形参username
pstm.setString(1, username);
// 初始化结果集,问题出在这里
ResultSet rs = pstm.executeQuery();        //rs为空?
System.out.println("开始检验是否有匹配的记录");
String uname = rs.getString("username");    //错误提示:Illegal operation on empty result set.
if (uname.equals(username)) {
// 若数据库中记录与页面传递参数值相同,则将flag标量作以修改
System.out.println("有匹配记录---->" + uname);
flag = true;
} else {
System.out.println("没有匹配的记录");
flag = false;
}


} catch (Exception e) {
e.printStackTrace();
} finally {
DBFactory.closeConnection(conn);
}


return flag;
}
}


//逻辑控制器主要代码:

public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {

// 设置编码格式
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
JdbcDao dao = new JdbcDao();

// 获取页面参数
String username = request.getParameter("username");
// 调用验证方法 
boolean bool = dao.validate(username);

if (bool == true) {
out.println("该用户名已经存在,请重新输入");
} else {
out.println("该用户名可以使用");
}
}

加载中
0
逝水fox
逝水fox
resultSet获取后需要调用一次next()才会指向查询结果的第一行,书上一般对这个都有说明,建议细看并对照例子分析。另只有next返回true,才能getXXX,否则查询结果为空,仍然会有异常
键盘小生
键盘小生
正解
0
w
walk_lai

引用来自“逝水fox”的答案

resultSet获取后需要调用一次next()才会指向查询结果的第一行,书上一般对这个都有说明,建议细看并对照例子分析。另只有next返回true,才能getXXX,否则查询结果为空,仍然会有异常

right...一般都这样写
while(rs.next()){
//do somethine
}

返回顶部
顶部