Java Sql 结果集结束后出现异常

Java Sql Exception After End of Result Set

我的代码工作正常,但是当我尝试 运行 代码时,它首先显示 java.sql.SQLException:结果集结束后。我想知道是什么原因造成的,以及如何解决这个问题,因为这是一个评分项目。

public GenerateBill() 
{
    initComponents();
    try 
  {
        Class.forName("java.sql.DriverManager");
        Connection con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore","root","root");
        Statement stmt=(Statement)con.createStatement();
        String query, product;
        query="select * from store;";
        ResultSet rs=stmt.executeQuery(query);
        while(rs.next());
        {
            product=rs.getString("productname");
            jComboBox1.addItem(product);
        }
  } 
    catch(Exception e) 
  {
    JOptionPane.showMessageDialog(null,e.toString());
  }
}

当我执行代码时,首先出现 Message Dialog Box。 当我单击“确定”时,我尝试创建的页面将打开并正常执行。 所以,我对这意味着什么感到困惑。另外,我是这个网站的新手,所以我真的不知道我需要添加多少代码。其余代码用于不同的 jButton。该页面用于生成 Bills/Receipts.

您的代码中有些部分可以做得更好。具体来说,

  1. 使用 com.mysql.jdbc.Driver 因为你的数据库是 MySQL,而不是 java.sql.DriverManager

  2. 无需强制转换您的 Connection 对象。

  3. /bookstore 之后你可以添加 ?useSSL=false,虽然它不是强制性的,所以像 jdbc:mysql://localhost:3306/bookstore?useSSL=false

  4. 使用java.sql.PreparedStatement而不是简单的Statement

  5. 捕获后在 finally 块中关闭连接。

最终,您的代码应该如下所示,

public GenerateBill() {

    initComponents();

    Connection con = null;
    ResultSet rs = null;
    PreparedStatement stmt = null;

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore?useSSL=false","root","root");

        String query = "select * from store";
        stmt = con.prepareStatement(query);

        String product;

        rs = stmt.executeQuery();

        while(rs.next())
        {
            product = rs.getString("productname");
            jComboBox1.addItem(product);
        }
  } catch(Exception e) {
        JOptionPane.showMessageDialog(null,e.toString());
  } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (Exception e) {
            LOG.error("Error closing the connection with the database...");
            e.printStackTrace();
        }
  }
}

试试上面的方法,如果可以的话告诉我。如果不是,请 post 整个异常以查看导致问题的原因。