JDBC内置函数和预处理语句

时间:2008-11-19 08:31:54

标签: java jdbc

有没有办法使用PreparedStatement执行查询(包含内置数据库功能)?

实施例: 插入foo(位置)值(pointfromtext('12 .56666 13.67777',4130)) 这里pointfromtext是一个内置函数。

7 个答案:

答案 0 :(得分:2)

当然,这应该有效。

如果没有,您的数据库系统是什么,可以从SQL命令行运行完全相同的命令吗?

答案 1 :(得分:2)

通过我所看到的,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();

答案 2 :(得分:1)

问号未正确评估,因为它们位于简单引号之间。删除它们,它应该工作,

答案 3 :(得分:0)

PreparedStatement对象的范围正是为了执行查询。如果查询包含内置数据库函数是可以的,如果相同的查询在PreparedStatement之外工作,则一切都应该有效。

正如Thilo所说,测试您的查询表单SQL命令行,或使用您经常使用的SQL图形工具。

答案 4 :(得分:0)

您是否在此代码后添加了 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(); 

答案 5 :(得分:0)

您是否尝试不在preparaedStatement中设置双打?只是为了测试,你应该尝试直接在String中插入这些参数,例如:

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

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

然后尝试执行更新。

答案 6 :(得分:0)

也许你发现了Postgresql JDBC驱动程序的问题,而不是JDBC本身。通常,您希望实现的功能与JDBC一起使用。