1

有没有办法使用 PreparedStatement 执行查询(包含内置的 DB 函数)?

示例:插入 foo (location) 值 (pointfromtext('12.56666 13.67777',4130)) 这里 pointfromtext 是一个内置函数。

4

7 回答 7

2

当然,这应该有效。

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

于 2008-11-19T08:33:33.013 回答
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();
于 2008-11-19T15:54:11.940 回答
1

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

于 2008-11-19T10:24:13.587 回答
0

PreparedStatement 对象的范围正是执行查询。如果查询包含内置的 DB 函数是可以的,并且如果相同的查询在 PreparedStatement 之外工作,一切都应该工作。

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

于 2008-11-19T09:18:42.157 回答
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(); 
于 2008-11-19T09:23:29.963 回答
0

您是否尝试在preparedStatement 中不设置双打?只是为了测试,您应该尝试将此参数直接插入到字符串中,例如:

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

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

然后尝试执行更新。

于 2008-11-19T10:22:48.003 回答
0

也许您发现 Postgresql JDBC 驱动程序存在问题,而不是 JDBC 本身。通常,您想要实现的目标与 JDBC 一起使用。

于 2008-11-19T11:28:11.290 回答