Как правильно сделать запрос по условию с датой к БД в Java (JDBC)

315
03 ноября 2017, 08:51

Вопрос состоит в том что я хочу правильно оформить запрос, да бы не допустить в будущем SQL-инъекций но что-то не получается, помогите разобраться, делаю следующим образом:

String query="Select * from tab where date  between to_date(? , 'dd.mm.yyyy HH24:mi') and to_date('17.10.17 7:00', 'dd.mm.yy HH24:mi')"
PreparedStatement ps = connection.prepareStatement(query);
String test = "'" + datestart +" 22:00'";
ps.setString(1, test);
resultSets= ps.executeQuery(query);
while (resultSets.next())
{
 Roll roll = new Roll();
 roll.setNumbern(resultSets.getInt(1));
 roll.setRollnum(resultSets.getInt(3));
 roll.setShift(resultSets.getInt(20));
} 

Ну и наполняю List нужными мне данными для отображения. Но запрос не проходит, получаю ошибку:

Exception : ORA-03115: неподдерживаемый сетевой тип данных или представление данных

Либо

Exception : ORA-01858: вместо ожидаемой цифры обнаружен нецифровой символ

помогите пожалуйста разобраться. Спасибо

Answer 1

для метода setString интерфейса PreparedStatementне надо добавлять апостроф (') в строку.

Замените

String test = "'" + datestart +" 22:00'";

на

String test = "datestart +" 22:00";

и код заработает.

READ ALSO
Дубликаты в JPA

Дубликаты в JPA

Как в spring data jpa бороться с дубликатами? Например мне нужно сохранить профиль с листом тегов и со связью многие ко многимПри сохранении отдельно...

263
Как преобразовать xml конфигурацию <login-config> в web.xml в java class?

Как преобразовать xml конфигурацию <login-config> в web.xml в java class?

Как преобразовать xml конфигурацию в webxml в java class?

236
Как подружить маркеры с кластерами?

Как подружить маркеры с кластерами?

В проекте есть макеры и кластерыНужно чтобы работало нажатие у обоих

239