2014-12-05 69 views
1

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

我试过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)。

回答

0

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

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

相关问题