Ошибка базы данных - невозможно выбрать данные из таблицы «Транзакции»: такого столбца нет: «Дата» - ошибка Java - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь читать из моей базы данных, используя импорт Java java.sql.PreparedStatement и java.sql.ResultSet.В моей базе данных есть столбец, который я пытаюсь запросить, но он выдает мне сообщение об ошибке, поэтому я не уверен, как исправить эту ошибку.

Database error - can't select data from 'Transactions' table: no such column: 'Date' An error occurred! Database error - can't select data from 'Transactions' table: no such column: 'Date'

Оператор SQL, которым я являюсьпытается использовать это SELECT substr(Date, 4, 2), SUM(Price) FROM Transactions GROUP BY substr(Date, 4, 2).Этот оператор прекрасно работает при запуске в SQLite Studio.Я попытался использовать оператор в Java без использования функции substr, и он работает без ошибок, однако не дает требуемых результатов.

public static String selectAllMonth(List<Transaction> targetList) {
    targetList.clear();
    try {
        PreparedStatement statement2 = DatabaseConnection.newStatement(
                "SELECT substr(Date, 4, 2), SUM(Price) FROM Transactions GROUP BY substr(Date, 4, 2)"
        );

        if (statement2 != null) {
            ResultSet results2 = statement2.executeQuery();
            if (results2 != null) {
                while (results2.next()) {
                    targetList.add(new Transaction(0,null,results2.getString("Date"), results2.getDouble("Price"),0,null));
                }
            }
        }
    } catch (SQLException resultsException) {
        String error = "Database error - can't select data from 'Transactions' table: " + resultsException.getMessage();
        Logger.log(error);
        return error;
    }
    return "OK";
}

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Ответ от Bor Laze является правильным, чтобы заключить ваше имя в одинарные кавычки.Но вместо этого я предлагаю вам использовать строчные буквы с последующим подчеркиванием в именах: date_

Прописные / строчные буквы в именах таблиц / столбцов / и т. Д. Сложны, так как большинство баз данных не соответствуют стандарту SQL.Стандарт говорит, что имена должны быть преобразованы в заглавные буквы при назначении имени.

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

Я также использую заключительное подчеркивание в каждом имени, поскольку стандарт SQL явно обещает никогда не использовать это в ключевом слове языка.Это позволяет избежать коллизий, таких как ваше имя Date, конфликтующее с типом данных DATE в языке SQL.Вместо этого используйте date_, и вам не нужно будет заключать в кавычки свои имена 'Date', как показано в Answer by Laze .

Необходимость оборачивать свои имена в кавычки быстро становится утомительной и подверженной ошибкам.

0 голосов
/ 02 февраля 2019

Попробуйте SELECT substr(Date, 4, 2) as 'Date', SUM(Price) as 'Price' FROM Transactions GROUP BY substr(Date, 4, 2)

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