2012-05-11 27 views
0

我正在使用geotools庫來提取位置信息。與此我得到一個類型的對象在Java中使用java插入地理空間數據類型(mutipolygon)(jdbc)

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 

回答

0

MySQL不能知道如何存儲你的GEO對象,或什麼是他的大小。您不應該按照您嘗試的方式存儲對象。

PreparedStatement#setObject()文件說:

JDBC規範指定的標準映射從Java Object類型到SQL類型。在發送給數據庫之前,給定的參數將被轉換爲相應的SQL類型。 [...] 如果存在歧義,則此方法會引發異常,例如,如果對象是實現多個上述接口的類的類。

+0

您能否提供我可以從Java對象到SQL類型的映射的鏈接?我試圖找到它,但無法找到多邊形/多面體。 –

3

回答

  1. 你需要,你必須熟知文本幾何對象轉換。你可以在vividsolutions 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(); 
相關問題