我在 servlet 中编写了一段代码用于登录检查,如果我没有注释掉 ,我不知道为什么会收到类似
和 java.sql.SQLException: No data found
的错误String s4 = rs.getString(1)out.println(s4)
行如果我注释掉这行,我没有收到任何错误。
为什么我会收到这样的错误?我找不到答案。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class login extends HttpServlet {
Connection conn;
Statement stmt;
ResultSet rs;
String s = "";
public void init() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("Jdbc:Odbc:edsn");
s = "Your information is connected ......";
} catch (Exception e) {
s = "Exception 1....." + e.getMessage();
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
res.setContentType("text/html;charset=UTF-8");
PrintWriter out = res.getWriter();
out.println(s);
try {
String ID = req.getParameter("T1");
String query = "select * from user_db ";
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
out.println("user" + " " + "pass");
while (rs.next()) {
try {
if ((rs.getString(1)).equals(ID)) {
String s4 = rs.getString(1);
out.println(s4);
out.println("<html><body><h> login Pass.....:(</h></body></html>");
}
} catch (Exception e) {
out.println(e);
}
}
} catch (Exception e) {
out.println("Unable To Show the info... . . ." + e.getMessage());
}
}
}
最佳答案
为什么要写这样的代码?翻遍整张 table 真是太浪费了…… 仅IO... 为什么不改成这样:
ResultSet rs = null;
PreparedStatement st = null;
try {...
String ID = req.getParameter("T1");
String query = "select 1 from user_db where col_name = ?";
st = conn.prepareStatement(query);
st.setString(1, ID);
rs = st.executeQuery();
if (rs.next()) {
out.println(ID);
out.println("<html><body><h> login Pass.....:(</h></body></html>");
}
..
} finally {
if (rs != null) try { rs.close();}catch (Exception e) {}
if (st != null) try { st.close();}catch (Exception e) {}
}
注意准备好的语句已缓存并且更适合频繁使用
你让数据库做它擅长的事 - 搜索数据
select 1 而不是 select * 不会带回您并不真正需要的数据
一般来说,您返回的列和数据越多,jdbc 的工作就越困难,因此只获取您想要的内容 需要
并添加一个finally block 以始终正确关闭数据库连接
关于java - Servlet 代码中的结果集处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8747556/