Исключение Java Sql после завершения набора результатов - PullRequest
0 голосов
/ 07 ноября 2019

Мой код работает нормально, но когда я пытаюсь запустить код, он сначала показывает 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());
  }
}

Когда я выполняю код, сначала появляется Диалоговое окно сообщения . И когда я нажимаю OK, страница, которую я пытаюсь создать, открывается и работает нормально. Итак, я не понимаю, что это значит. Кроме того, я новичок в этом сайте, поэтому я не знаю, сколько кода мне нужно добавить. Остальная часть кода предназначена для разных кнопок jButton. Страница предназначена для генерации счетов / квитанций.

1 Ответ

0 голосов
/ 07 ноября 2019

В вашем коде есть некоторые части, которые могут быть лучше. В частности,

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

Попробуйте описанное выше и дайте мне знать, если все в порядке. Если нет, опубликуйте полное исключение, чтобы узнать причину проблемы.

...