有没有办法使用PreparedStatement执行查询(包含内置数据库功能)?
实施例: 插入foo(位置)值(pointfromtext('12 .56666 13.67777',4130)) 这里pointfromtext是一个内置函数。
答案 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一起使用。