java - Servlet 代码中的结果集处理错误

标签 java servlets jdbc

我在 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/

相关文章:

java - Docx4j 如何解释 css

java - 修改Filter中URI的PathParam

java - 如何在eclipse中添加servlet的代码模板

java - 这是为我的 servlet 添加 "global"参数的正确方法吗?

Java 忽略类路径

java - SQL 查询可在 MySQL 中运行,但不能在 Java 中运行

java - 我们可以从 reSTLet 框架中实现的客户端调用 Jersey Web Service 服务器吗?

java - Hive GenericUDF 错误 - RuntimeException typeInfo 不能为 null

java - 编译 servlet 时出现 "Access is denied."

java - 通用 JDBCException : Invalid column type: getCLOB not implemented