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 に答える