使用java(jdbc)在mysql中插入地理空间数据类型(多多边形)

使用java(jdbc)在mysql中插入地理空间数据类型(多多边形),java,jdbc,geospatial,geotools,Java,Jdbc,Geospatial,Geotools,我正在使用geotools库提取位置信息。这样我就得到了一个 class com.vividsolutions.jts.geom.MultiPolygon 现在我想用jdbc连接将此字段存储在mysql表中。 当我直接尝试将其作为 pstminsert.setObject(4,geoobject) 我得到了这个错误 Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Cannot get

我正在使用geotools库提取位置信息。这样我就得到了一个

class com.vividsolutions.jts.geom.MultiPolygon
现在我想用jdbc连接将此字段存储在mysql表中。 当我直接尝试将其作为
pstminsert.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

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

文件说:

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


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

文件说:

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

答复
  • 需要将几何体对象转换为已知文本。您将在解决方案中找到有关如何做到这一点的信息

  • 使用mysql方法插入/更新数据

  • 答复
  • 需要将几何体对象转换为已知文本。您将在解决方案中找到有关如何做到这一点的信息

  • 使用mysql方法插入/更新数据


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

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

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

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

    你能给我提供一个链接,在那里我可以得到从Java对象到SQL类型的映射吗?我正试图找到它,但在多边形/多面多边形中找不到它。你能给我提供一个链接,在那里我可以得到从Java对象到SQL类型的映射吗?我正试图找到它,但无法找到多边形/多多边形。
    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();