Java 如何使用JDBC从数据库中检索SDO_几何体?

Java 如何使用JDBC从数据库中检索SDO_几何体?,java,oracle,jakarta-ee,jdbc,Java,Oracle,Jakarta Ee,Jdbc,我是Java新手。我需要从数据库中检索SDO_几何体,并使用jdbc将其转换为字符串。如果有人有示例或想法,请与我分享 我们将不胜感激 致以最诚挚的问候, 桑杰。看看课堂。下面是一个调用空间类型的示例: /// reading a geometry from database ResultSet rs = statement.executeQuery("SELECT geometry FROM states where name='Florida'"); STRUC

我是Java新手。我需要从数据库中检索SDO_几何体,并使用jdbc将其转换为字符串。如果有人有示例或想法,请与我分享

我们将不胜感激

致以最诚挚的问候,
桑杰。

看看课堂。下面是一个调用空间类型的示例:

     /// 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(参见),那么还有一种更基本的方法可以从ResultSet
r
访问SDO_几何体对象:

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();
double[]纵坐标=新的double[ordinationarray.length];
对于(int i=0;i<纵坐标.length;i++)
纵坐标[i]=纵坐标数组[i]。双值();

或者使用等效的更方便的方法(cf.)。

SDO_几何体是一种对象类型。“我需要从数据库中检索SDO_几何体并将其转换为字符串”是什么意思?除非应用层将对数据进行几何体计算(例如距离、面积),那么为什么不将SDO_几何体转换为数据库中的字符串?形状[2D/3D?]有多大、多复杂?您想要什么样的字符串?谢谢您的快速回复。但我尝试了上面的代码,似乎不起作用。我想我在某些地方做错了。我需要检索SDO_几何体值,我必须在地图上显示。如果你有任何样品,请与我分享。我不能提供一个完全有效的例子,但你可以写你的问题与上述例子,然后也许我可以帮助你