Может ли SQL-запрос с одинаковыми параметрами возвращать разные данные при запуске через базу данных java против mySQL? - PullRequest
0 голосов
/ 06 июля 2018

У меня два запроса: (один вычисляет сумму записей, а другой выбирает все записи)

Query 1: 
select sum(tb_nominal) from tb_sec_tran where tb_account_id = 112 and tb_security_id = 234 
and trunc(tb_execution_time) < trunc(to_date('31-12-2017','dd-mm-yyyy');


Query 2: select tb_nominal from tb_sec_tran where tb_account_id = 112 and tb_security_id = 
234 and trunc(tb_execution_time) < trunc(to_date('31-12-2017','dd-mm-yyyy');

Что лежит в базе данных.

tb_nominal | tb_execution_time
520        | 08-MAR-17
486        | 04-JAN-18
520        | 01-JAN-18
-520       | 31-DEC-17

Случай 1: Я выполнил эти два запроса в базе данных (sql developer). Для первого запроса я получаю 520.0 в качестве вывода. По второму запросу я получаю 1 запись в выводе с tb_nominal = 520.0.

Случай 2: на платформе Java, я реализовал следующий код:

PreparedStatement pstmt = null;
ResultSet rs = null;
Double sum = null;
StringBuffer sql = new StringBuffer(" select sum(tb_nominal) from tb_sec_tran where 
tb_account_id = ? and tb_security_id = ? and trunc(tb_execution_time) < trunc(?) ");

pstmt = m_Connection.prepareStatement(sql.toString());
pstmt.setLong(1, spekuVO.getContent().getAccountId());
pstmt.setLong(2, spekuVO.getContent().getInstrumentId());
pstmt.setDate(3, toDate.getSQLDatum());
rs = pstmt.executeQuery();
if (rs.next()) {
   sum = rs.getDouble(1);
 }

Проблема: Поэтому, когда я запускаю код, вместо номинального значения 520,0, я получаю сумму как 0,0, которая отличается от того, что было возвращено в базе данных. Точно так же, если я внесу изменение в переменную sql, удалив слово суммы, чтобы сделать его похожим на запрос 2, я получу две записи, как на изображении, которое я прикрепил.

Я совершенно сбит с толку странным поведением. Есть ли какие-либо изменения в обработке JAVA 8 по сравнению с JAVA 6, связанные с этим? Пожалуйста, предложите мне, если есть причины для такого поведения.

1 Ответ

0 голосов
/ 06 июля 2018

Нет, Java волшебным образом не дает неправильных результатов.

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

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