Prabesh Shrestha
Prabesh Shrestha

Reputation: 2742

insert geospatial datatype( mutipolygon) in mysql with java( jdbc)

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

Upvotes: 0

Views: 5280

Answers (3)

guymac
guymac

Reputation: 406

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

Upvotes: 2

user1416258
user1416258

Reputation:

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

Upvotes: 3

alain.janinm
alain.janinm

Reputation: 20065

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.

Upvotes: 0

Related Questions