SQL Sum Query работает в PHPmyAdmin, но не в Java resutset - PullRequest
0 голосов
/ 06 января 2020

У меня есть таблица под названием «Транзакции». Он имеет 5 атрибутов: Дата, Описание, Сумма, Имя клиента, Transaction_ID, где Transaction_ID является первичным ключом. В примере данных «Имя клиента» «Джон Смит» имеет две транзакции, в которых он тратит 100,10 и 56,56 каждая. SQL Запрос возвращает ожидаемый результат 156.66 в PHPMyAdmin, но JDB C, похоже, не распознает его в ResultSet.

Вот мой код:

 public void calculate_client_spending() throws SQLException {
    ConnectionClass Databaseloader = new ConnectionClass();
    Databaseloader.getConnection();
    String sql = "SELECT SUM(Amount) AS total FROM Transactions WHERE Clientname = 'John Smith';";

    ResultSet rs = Databaseloader.executeSQLRequestCommand(sql);
    //  rs.next();

    // System.out.println(sum);
    ResultSetMetaData rsMetaData = rs.getMetaData();
    int numberOfColumns = rsMetaData.getColumnCount();
    System.out.println(numberOfColumns);
    // get the column names; column indexes start from 1
    for (int i = 1; i < numberOfColumns + 1; i++) {
        String columnName = rsMetaData.getColumnName(i);

        // Get the name of the column's table name
        if ("total".equals(columnName)) {
            System.out.println("Bingo!");
            rs.last();
            int count = rs.getRow();
            rs.beforeFirst();
            System.out.println(count);
            while (rs.next()) {
                Results_trasactions.setText("");
                System.out.println("The total profits today are: " + rs.getString(1));
            }
        }

    }
}

Этот запрос возвращает ноль в этом примере, но если бы я сделал rs.getDouble (1), он вернул бы 0. Любое представление о том, что проблема может быть здесь? Я могу заставить работать подобные запросы SUM, такие как SUM для всех клиентов, и предложение WHERE, похоже, работает для моего первичного ключа, но этот конкретный c Запрос JDB C, похоже, не нравится, хотя SQL действителен в PHPmyadmin, что заставляет меня думать, что это проблема Java, а не SQL. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 06 января 2020

Поскольку, к сожалению, это слишком долго для комментария:

Не значит, что это значит, но, возможно, вам не следует создавать новую учетную запись, чтобы снова ответить на удаленный вопрос ({ ссылка }) -> Google Cache - также используемые вами классы базы данных отдают вашу "реальную" учетную запись ( Как получить переменную "total", представляющую сумму в наборе результатов ) - поэтому я голосую, чтобы снова закрыть этот вопрос.

Однако, чтобы быть хотя бы некоторыми подсказками:

ConnectionClass Databaseloader = new ConnectionClass();
Databaseloader.getConnection();

Databaseloader не является классом JDB C по умолчанию , а точнее некоторый (плохо) написанный класс stati c, который для меня выглядит странной оберткой. Вы можете сделать это, но в любом случае вы не будете делать это статически. И, добавив методы в Google, вы обнаружите: почти ничего.

Для mySQL вы получите соединение с базой данных следующим образом:

Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "sa", "sa")

и скорее поработаете с объектом соединения ,

Я бы порекомендовал вам сделать следующее:

  1. Узнайте, как подключить вашу базу данных в Java
  2. Узнайте, как создать и выполнить подготовленный оператор
  3. Узнайте, как извлечь результат из набора результатов
  4. Узнайте о привязке параметров (избегайте SQL инъекций)
  5. Прибыль!

Все эти темы хорошо освещены в stackoverflow.

...