簡體   English   中英

如何使用 JDBC 從數據庫中檢索 SDO_GEOMETRY?

[英]How to retrieve SDO_GEOMETRY from database using JDBC?

我是 Java 新手。我需要從數據庫中檢索 SDO_GEOMETRY 並使用 jdbc 將其轉換為字符串。如果有人有示例或想法,請與我分享。

幫助將不勝感激。

最好的祝福,
桑傑。

看看JGeometry類。 有一個調用空間類型的例子:

     /// reading a geometry from database
     ResultSet rs = statement.executeQuery("SELECT geometry FROM states where name='Florida'");
     STRUCT st = (oracle.sql.STRUCT) rs.getObject(1);
     //convert STRUCT into geometry
     JGeometry j_geom = JGeometry.load(st);

     // ... manipulate the geometry or create a new JGeometry ...

     /// writing a geometry back to database
     PreparedStatement ps = connection.prepareStatement("UPDATE states set geometry=? where name='Florida'");
     //convert JGeometry instance to DB STRUCT
     STRUCT obj = JGeometry.store(j_geom, connection);
     ps.setObject(1, obj);
     ps.execute();

如果 Oracle Spatial API 對您不可用,例如因為您使用 OpenJDK(參見Oracle FAQs ),還有一種更基本的方法可以從 ResultSet r訪問 SDO_GEOMETRY 對象:

import java.sql.Struct;
import java.sql.Array;

//...

// access SDO_GEOMETRY of row 1
Object[] geometryArray = ((Struct) r.getObject(1)).getAttributes();
// read its components
int gtype = ((Integer) geometryArray[0]).intValue();
int srid = ((Integer) geometryArray[1]).intValue();
Double[] pointArray = ((Double[]) ((Array) geometryArray[2]).getArray());
Integer[] elemInfoArray = ((Integer[]) ((Array) geometryArray[3]).getArray());
Double[] ordinateArray = ((Double[]) ((Array) geometryArray[4]).getArray());

您還可以通過一個簡單的循環來解開數字類型,例如,

double[] ordinates = new double[ordinateArray.length];
for (int i = 0; i < ordinates.length; i++)
     ordinates[i] = ordinateArray[i].doubleValue();

或使用等效的更方便的方法(參見StackOverflow: How do I convert Double[] to double[]? )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM