Как вывести сумму столбцов из базы данных sql в приложение Java? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть база данных, в которой хранятся записи моего проекта, в одном из столбцов, который называется «количество», я хочу иметь возможность получить это «количество» и отобразить его в моем java приложении. Если вы видите мой код ниже, вы можете видеть, что я пытаюсь распечатать эту сумму из своей базы данных, но она не работает. Когда я запускаю свое приложение, всегда выполняется ловушка, а не попытка. Я не уверен, что, может быть, я неправильно выполнил код SQL, но это только мое предположение, если вы знаете, как решить эту проблему, дайте мне знать, спасибо.

private void initComponents() {
private String sum;


try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con1 = DriverManager.getConnection("jdbc:mysql://localhost/restock", "root", "password");
            String template = "SELECT SUM(quantity) as sumquantity FROM buysupply WHERE itemtype IN ('Disposable mask', 'Clothed mask', 'N95 mask')";
            PreparedStatement pst = con1.prepareStatement(template);
            ResultSet rs = pst.executeQuery();
            sum = rs.getString("sumquantity");
            System.out.print("############################" + sum);
                  
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(stock.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(stock.class.getName()).log(Level.SEVERE, null, ex);
        }




}

Для вашей информации, ошибка такая:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Aug 06, 2020 1:22:03 AM pleasework.stock initComponents
SEVERE: null
java.sql.SQLException: Before start of result set
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.result.ResultSetImpl.checkRowPos(ResultSetImpl.java:492)
    at com.mysql.cj.jdbc.result.ResultSetImpl.getString(ResultSetImpl.java:845)
    at com.mysql.cj.jdbc.result.ResultSetImpl.getString(ResultSetImpl.java:863)
    at pleasework.stock.initComponents(stock.java:92)
    at pleasework.stock.<init>(stock.java:30)
    at pleasework.stock$16.run(stock.java:823)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

1 Ответ

1 голос
/ 05 августа 2020

Вы должны вызвать rs.next(), чтобы загрузить первую строку в ваш набор результатов, прежде чем вы сможете использовать rs.getString('...').

ResultSet rs = pst.executeQuery();
rs.next();
sum = rs.getString("sumquantity");
System.out.print("############################" + sum);

Вы также должны использовать rs.next(), чтобы проверить, получили ли вы результат. Так, например:

ResultSet rs = pst.executeQuery();
if (rs.next()) {
    sum = rs.getString("sumquantity");
    System.out.print("############################" + sum);
} else {
    System.out.print("Query didn't return any results");
}

Еще одна вещь, привлекающая внимание: вы используете getString(), чтобы получить числовое значение c. Вероятно, вы захотите вместо этого использовать rs.getInt() или rs.getDouble().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...