#java #sql #jdbc
#java #sql #jdbc
Вопрос:
Отправка запроса из SQLiteStudio возвращает ожидаемый результат из представления. Однако, когда один и тот же запрос отправляется из моей программы на Java, результат для некоторых запросов отличается.
ie: ВЫБЕРИТЕ Rev ИЗ PartRevs, ГДЕ PartNumber = ‘800111’
Это возвращает ожидаемый результат «B» при выполнении в SQLiteStudio. Однако затем тот же запрос выполняется из JAVA, он возвращает «A». Оба запроса возвращают только один результат.
Это происходит не всегда. Большинство запросов работают, но иногда это не работает.
‘Rev’ или ревизия данной части извлекается из другой таблицы с именем ‘ECO_TDA_Linewise’. Каждый раз, когда для данной части выпускается новая редакция, добавляется новая строка с увеличивающимися номерами индексов.
Я считаю, что проблема связана с тем, как работает представление «PartRevs». Из многих других таблиц и запросов это единственная проблема.
Вот блоки кода, которые взаимодействуют с базой данных:
public String GetRevision(String PartNumber) {
String sqlStatement = "SELECT Rev FROM PartRevs WHERE PartNumber = '" PartNumber "'";
return getDatabaseResult(sqlStatement, "Rev");
}
public String getDatabaseResult(String sqlStatement, String Column) {
String result = "";
try (Connection conn = FulfillmentWorkorders.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sqlStatement)) {
result = rs.getString(Column);
conn.close();
} catch (SQLException e) {
System.out.println(""" sqlStatement "" throws exception: " e.getMessage());
}
return resu<
}
Комментарии:
1. Сколько записей в вашем наборе результатов jdbc для этого номера партнера? Можете ли вы показать свой java-код, в котором вы извлекаете результат из набора?
2. Всего одна запись в результирующем наборе, хороший вопрос, хотя я проверил это как проблему. Я также добавил код.
3. Подобные проблемы обычно являются результатом запроса к базе данных, отличной от той, которую вы запрашиваете в другой программе. КСТАТИ: объединение значений в строку запроса — плохая практика: это делает ваш SQL уязвимым для внедрения SQL. Пожалуйста, ознакомьтесь с подготовленными инструкциями и параметрами.
4. Кроме того, код, который у вас есть в настоящее время, является недопустимым JDBC: вы никогда не вызываете
rs.next()
перед попыткойrs.getString(Column)
, поэтому результирующий набор помещается перед первой строкой. В этом случае совместимый с JDBC драйвер выдаст исключение. Возможно ли, что, возможно, ваш запрос вызвал исключение, а какая-то другая часть вашей программы по умолчанию отображаетсяA
?5. Вы объединяете строки в своем запросе. Не делайте этого.