Оператор select, написанный с использованием Statement.executeQuery, не может выбирать значения, имеющие - (тире) - PullRequest
0 голосов
/ 12 июня 2018

У меня есть таблица базы данных Oracle MyTable, в которой есть столбец XYZ с типом данных varchar2(40 Byte).

Также в этой таблице есть строка, имеющая XYZ значение столбца, например '12345678-1234'

Когда я использую клиент Oracle SQL и запускаю оператор выбора: select * from MyTable where XYZ='12345678-1234';, он возвращает одну запись.

Но когда я выполняю ту же инструкцию выбора с использованием Java (приведенную ниже), он возвращает нет строк.

Connection con = DriverManager.getConnection(url,user,pass);//I have proper parameters here
Statement stmt = con.createStatement();  
String query= "select * from MyTable where XYZ='12345678-1234'";
ResultSet rs = stmt.executeQuery(query);
if (rs.next()){
 System.out.println(rs.getString("XYZ")); 
}else {
 System.out.println("No Value")); 
}

Здесь всегда печатается Нет значения

РЕДАКТИРОВАТЬ: , когда я использую значения без черты в строках таблицы (например:«12345678»), то оба приведенных выше результата дают один и тот же результат - одна строка.

Пожалуйста, укажите, что мне здесь не хватает.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Это не было проблемой кода Java, который я нашел.

COMMIT был виновником.

Я одновременно обращался к базе данных из клиента Oracle Sql и Java, и это вызывало вышеуказанную проблему.

Затем я использовал Commit; после каждого оператора, который я выполняю в клиенте Oracle Sql. Тогда проблема исчезла.

Если кто-то захочет добавить к этому какие-то технические подробности, тогда мы будем рады!

0 голосов
/ 12 июня 2018

Вы должны использовать PreparedStatement

PreparedStatement stmt = con.prepareStatement("select * from MyTable where XYZ = ?");
preparedStatement.setString(1, "12345678-1234");
ResultSet rs = preparedStatement.executeQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...