JDBC встроенные функции и подготовленные заявления - PullRequest
1 голос
/ 19 ноября 2008

Есть ли способ выполнить запрос (содержащий встроенную функцию БД), используя PreparedStatement?

Пример: вставить в значения foo (location) (pointfromtext ('12 .56666 13.67777 ', 4130)) Здесь pointfromtext - это встроенная функция.

Ответы [ 7 ]

2 голосов
/ 19 ноября 2008

Конечно, это должно работать.

Если нет, то какова ваша система баз данных, и можете ли вы выполнить точно такую ​​же команду из командной строки SQL?

2 голосов
/ 19 ноября 2008

Судя по тому, что я видел, первый параметр функции pointfromtext - это строка, а второй - число. Итак, попробуйте следующее:

PreparedStatement preparedStatement = getConnection().prepareStatement("insert into map_address (location) values(pointfromtext('POINT(' || ? || ' ' || ? || ')',4130))");
preparedStatement.setString(1, "12.56565665");
preparedStatement.setString(2, "12.57565757");
preparedStatement.executeUpdate();
1 голос
/ 19 ноября 2008

Вопросительные знаки не оцениваются правильно, потому что они находятся между простыми кавычками. Удалите их, и это должно сработать,

0 голосов
/ 19 ноября 2008

Возможно, вы обнаружили проблему с драйвером JDBC Postgresql, а не с JDBC как таковым. В целом то, чего вы хотите добиться, работает с JDBC.

0 голосов
/ 19 ноября 2008

Вы пытались не устанавливать double в preparaedStatement? Просто для тестирования, вы должны попытаться вставить эти параметры непосредственно в строку, что-то вроде:

String sql = "insert into map_address (location) values(pointfromtext('POINT(" +  "12.56565665" + " " + "12.57565757" + ")',4130))"

PreparedStatement preparedStatement = getConnection().prepareStatement(sql);

и попробуйте выполнить обновление.

0 голосов
/ 19 ноября 2008

Вы поставили connection.commit () после этого кода?

Код должен быть:

 PreparedStatement bar = connection.prepareStatement("insert into foo (location) values (pointfromtext('? ?',4130)))");
 bar.setDouble(1, 13.67777);
 bar.setDouble(2, 13.67777); 
 bar.executeUpdate();
 connection.commit(); 
0 голосов
/ 19 ноября 2008

Область действия объекта PreparedStatement предназначена именно для выполнения запросов. Если запрос содержит встроенную функцию БД, все в порядке, и все должно работать, если тот же запрос работает вне PreparedStatement.

Как сказал Тило, протестируйте командную строку SQL формы запроса или с помощью графического инструмента SQL, который вы обычно используете.

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