0

我正在使用 geotools 库来提取位置信息。有了这个,我得到了一个类型的对象

class com.vividsolutions.jts.geom.MultiPolygon

我现在想通过 jdbc 连接将此字段存储在我的 mysql 表中。当我 pstmtInsert.setObject(4, geoobject) 收到此错误时直接尝试插入它时

Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Cannot get geometry object from data you send to the GEOMETRY field
4

3 回答 3

3

回答

  1. 您需要将必须的几何对象转换为众所周知的文本。您可以在vividsolutions API 文档中找到有关如何执行此操作的信息。

    geoobject.toText();
    
  2. 使用 mysql GeomFromText方法插入/更新数据。

    INSERT INTO geom VALUES (GeomFromText(@g));
    
于 2012-06-15T10:31:38.547 回答
2

它也可以是二进制的,例如

PreparedStatement preparedStatement = connection.prepareStatement
("INSERT INTO table (point, polygon) VALUES (PointFromWKB(?), GeomFromWKB(?))");

WKBWriter writer = new WKBWriter();

preparedStatement.setBytes(1, writer.write(point));
preparedStatement.setBytes(2, writer.write(polygon));

preparedStatement.executeUpdate();
于 2014-02-18T21:59:16.987 回答
0

MySql 不知道如何存储您的 GEO 对象,或者他的大小。您不应该以您尝试的方式存储对象。

PreparedStatement#setObject()文档说:

JDBC 规范指定了从 Java 对象类型到 SQL 类型的标准映射。给定的参数将在发送到数据库之前转换为相应的 SQL 类型。[...]如果存在歧义,例如,如果对象属于实现多个上述接口的类,则此方法会引发异常。

于 2012-05-11T08:56:42.627 回答