【问题标题】:insert geospatial datatype( mutipolygon) in mysql with java( jdbc)使用java(jdbc)在mysql中插入地理空间数据类型(multipolygon)
【发布时间】:2012-05-19 20:36:29
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: java jdbc geospatial geotools


    【解决方案1】:

    也可以是二进制的,例如

    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();
    

    【讨论】:

      【解决方案2】:

      回答

      1. 您需要将您拥有的几何对象转换为众所周知的文本。您可以在生动的解决方案API documentation 中找到有关如何执行此操作的信息。

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

        INSERT INTO geom VALUES (GeomFromText(@g));
        

      【讨论】:

        【解决方案3】:

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

        PreparedStatement#setObject() 文档说:

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

        【讨论】:

        • 你能给我提供从 Java 对象到 SQL 类型的映射的链接吗?我正在尝试找到它,但无法为多边形/多多边形找到它。
        猜你喜欢
        • 2015-11-10
        • 1970-01-01
        • 2015-06-20
        • 2019-03-08
        • 2017-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-21
        相关资源
        最近更新 更多