我想创建一个名称属性并使用resultset方法为其设置一个值,但它在request.setAttribute(..)
之后中断。
退出第一个if else结构,但不继续执行转发或返回语句。
如果我使用rs.next()
作为名称的值,它工作得很好,所以我很确定我使用rs.getString
的方式是错误的。我检查了文档,找不到我的错误。
String sql = "select * from students where id="+ request.getParameter("st_id");
ResultSet rs= stmt.executeQuery(sql);
if (rs.wasNull()) {
request.getRequestDispatcher("/login_fail.jsp").forward(request, response);
return;
}else{
request.setAttribute("name", rs.getString("name"));
request.getRequestDispatcher("/login_action.jsp").forward(request, response);
return;
}
您应该呼叫rs.next()
。因为当你收到ResultSet游标是指向结果集的第一行之前的地方。所以你必须调用next()
方法,然后得到结果在java API中,它说
boolean next() throws SQLException
Moves the cursor froward one row from its current position. A ResultSet cursor is initially positioned before the first row; the first call to the method next makes the first row the current row; the second call makes the second row the current row, and so on.
读取ResultSet.next()的文档
因此可以编写如下代码
String sql = "select * from students where id="+ request.getParameter("st_id");
ResultSet rs= stmt.executeQuery(sql);
if(rs.next()){
if (rs.wasNull()) {
request.getRequestDispatcher("/login_fail.jsp").forward(request, response);
}else{
request.setAttribute("name", rs.getString("name"));
request.getRequestDispatcher("/login_action.jsp").forward(request, response);
}
}
请在此处打印列名。
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
// The column count starts from 1
for (int i = 1; i < columnCount + 1; i++ ) {
String name = rsmd.getColumnName(i);
System.out.println(name);
}
试着像下面这样修改代码
String sql = "select * from students where id="+ request.getParameter("st_id");
ResultSet rs= stmt.executeQuery(sql);
if (rs.wasNull()) {
request.getRequestDispatcher("/login_fail.jsp").forward(request, response);
return;
}else{
while (resultSet.next()) {
request.setAttribute("name", rs.getString("name"));
request.getRequestDispatcher("/login_action.jsp").forward(request, response);
}
return;
}
您可以尝试更改查询并在其中提供列名,如:
String sql = "select name, col1 from students where id="+ request.getParameter("st_id");
ResultSet rs= stmt.executeQuery(sql);
然后你可以像这样使用rs.getstring:
if(rs.next())
{
if (rs.wasNull())
{
request.getRequestDispatcher("/login_fail.jsp").forward(request, response);
return;
}
else
{
request.setAttribute("name", rs.getString(1));
request.getRequestDispatcher("/login_action.jsp").forward(request, response);
return;
}
}