문제

I am using geotools library to extract the location information. With that I am getting an object of type

class com.vividsolutions.jts.geom.MultiPolygon

I now want to store this field in my mysql table with a jdbc connection . When I directly try to insert it as pstmtInsert.setObject(4, geoobject) I am getting this error

Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Cannot get geometry object from data you send to the GEOMETRY field
도움이 되었습니까?

해결책

MySql can't know how to store your GEO object, or what is his size. You should not store the object the way you're trying.

The PreparedStatement#setObject() documentation says :

The JDBC specification specifies a standard mapping from Java Object types to SQL types. The given argument will be converted to the corresponding SQL type before being sent to the database. [...] This method throws an exception if there is an ambiguity, for example, if the object is of a class implementing more than one of the interfaces named above.

다른 팁

Answer

  1. You need to convert the geometry object you have to well known text. You'll find information on how to do that in the vividsolutions API documentation.

    geoobject.toText();
    
  2. Insert / Update the data using the mysql GeomFromText method.

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

It can be binary as well, e.g.

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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top