【问题标题】:SQLServer - Is it possible to update a geometry column using a jdbc resultset?SQLServer - 是否可以使用 jdbc 结果集更新几何列?
【发布时间】:2015-01-28 22:23:32
【问题描述】:

是否可以使用“可更新”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)。

【问题讨论】:

    标签: java sql-server jdbc


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-20
      • 2023-04-06
      • 2022-09-27
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 2011-05-14
      • 2014-01-14
      相关资源
      最近更新 更多