2012-05-11 11 views
0

私はgeotoolsライブラリを使用して位置情報を抽出しています。これで私はタイプのオブジェクトを取得していますjava(jdbc)を使用してmysqlの地理空間データ型(mutipolygon)を挿入します

class com.vividsolutions.jts.geom.MultiPolygon 

このフィールドをmysqlテーブルにjdbc接続で保存します。 私はこのエラーに

Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Cannot get geometry object from data you send to the GEOMETRY field 

答えて

0

を取得しています pstmtInsert.setObject(4, geoobject) として、私は直接それを挿入しようとするとMySQLはあなたのGEOのオブジェクトを格納する方法を知ることができない、または彼のサイズは何ですか。あなたは、あなたが試みているようにオブジェクトを格納すべきではありません。

PreparedStatement#setObject()ドキュメントは言う:

JDBC仕様では、Javaオブジェクト型からSQL型への標準マッピングを指定します。指定された引数は、データベースに送信される前に対応するSQL型に変換されます。 [...] このメソッドは、あいまいさがある場合(たとえば、オブジェクトが上記の複数のインターフェイスを実装するクラスの場合など)に例外をスローします。

+0

JavaオブジェクトからSQL型へのマッピングを取得できるリンクを教えてください。私はそれを見つけようとしていますが、ポリゴン/マルチポリゴンのためにそれを見つけることができませんでした。 –

3

回答

  1. あなたはよく知られたテキストに持ってジオメトリオブジェクトを変換する必要があります。あなたは鮮やかなソリューションAPI documentationでそれを行う方法に関する情報を見つけるでしょう。

    geoobject.toText(); 
    
  2. mysql GeomFromTextメソッドを使用してデータを挿入/更新します。

    INSERT INTO geom VALUES (GeomFromText(@g)); 
    
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(); 
関連する問題