在下面代码中,执行会出现Before start of result set问题
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String idcard = request.getParameter("idcard");
HttpSession session =request.getSession();
Connection conn = null;
PreparedStatement stat = null;
ResultSet rs = null;
try
{
conn = JdbcUtil.getConnection();
String sql = "select * from user t where t.name=? and t.id =?";
stat = conn.prepareStatement(sql);
stat.setString(1, username);
stat.setString(2, idcard);
rs = stat.executeQuery();
System.out.println("查询成功");
if(rs.next())
{
session.setAttribute("id", rs.getString(1));
session.setAttribute("name",rs.getString(2));
session.setAttribute("age",rs.getString(3));
request.getRequestDispatcher("result.jsp").forward(request, response);
return;
}
} catch (ClassNotFoundException e)
{
e.printStackTrace();
} catch (SQLException e)
{
e.printStackTrace();
}
/*****************************************分割线****************************************/
问题出现在上面红字部分,不可以那样用。
应该 先定义
String s1 = "";
String s2 = "";
String s3 ="";
if(rs.next())
{
s1 = rs.getString(1);
s2 = rs.getString(2);
s3 = rs.getString(3);
... ...
}
即使你十分确定能搜出记录,也不可以在没有rs.next()之前直接对rs进行取值。这涉及到rs对象的存储方法。里面说白了就是指针。没next,指针根本没指向对应记录。