SQLServer - 是否可以使用jdbc结果集更新几何列?

时间:2014-12-05 11:54:03

标签: java sql-server jdbc

是否可以使用“可更新”的jdbc结果集更新SQLServer数据库中的几何列?

我已经尝试过updateString()和updateObject()方法都无济于事。例如:

String point = "geometry::STGeomFromText('POINT (30 -20)',4326)";
rs.updateString("COORDINATE", point);
rs.update();

抛出异常:

com.microsoft.sqlserver.jdbc.SQLServerException: The string is not in a valid hex format.

我无法找到此错误的含义。我是否需要逃避某些角色?我可以将函数作为字符串传递吗?或者我应该使用不同的更新方法,如updateBlob()或updateNCharacterStream()?

顺便说一下,我可以使用准备好的声明来更新几何体,但我不愿意。例如:

String sql = "UPDATE MY_TABLE SET COORDINATE=geometry::STGeomFromText(?,4326) WHERE ID=?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "POINT (30 -20)");

同样,我不想使用预准备语句。我想使用结果集更新记录(例如updateString)。

1 个答案:

答案 0 :(得分:0)

您当前的代码相当于尝试将列的值设置为字符串"geometry::STGeomFromText('POINT (30 -20)',4326)",这显然不起作用,因为函数调用的字符串值与函数调用本身不同。 UpdateString只能用于设置值,而不能用于调用函数。

根据错误消息,您需要使用已编码坐标的十六进制字符串。我不知道Java中是否有可用的方法来计算这个,所以我担心使用UPDATE的现有解决方法可能是唯一可用的解决方案。