mysqlnetbeans-8database-connectivity

Java Sql Exception After End of Result Set


My code works fine but when I try to run the code it first shows java.sql.SQLException:After end of result set. I would like to know what is causing this and how to fix this as this is for a graded project.

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());
  }
}

When I execute the code a Message Dialog Box shows up first. And when I click OK, the page I'm trying to make opens and executes normally. So, I'm confused as to what it means. Also, I'm new to this site, so I don't really know how much of the code I need to add. The rest of the code is for different jButtons. The page is for Generating Bills/Receipts.


Solution

  • There are some parts in your code that could be better. Specifically,

    1. Use com.mysql.jdbc.Driver as your DB is MySQL, instead of java.sql.DriverManager

    2. No need to cast your Connection object.

    3. After /bookstore you could add ?useSSL=false, although it is not mandatory, so something like jdbc:mysql://localhost:3306/bookstore?useSSL=false

    4. Use java.sql.PreparedStatement instead of simply Statement.

    5. Close your connection in a finally block after catch.

    Eventually, your code should look somehow like the following,

    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();
            }
      }
    }
    

    Try the above and let me know if it is OK. If not, please post the whole exception to see what causes the issue.