有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我们将不胜感激

致以最诚挚的问候,
桑杰


共 (2) 个答案

  1. # 1 楼答案

    如果Oracle Spatial API不适用于您,例如因为您使用OpenJDK(参见Oracle FAQs),那么还有一种更基本的方法可以从结果集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();
    

    或者使用等效的更方便的方法(参见StackOverflow: How do I convert Double[] to double[]?

  2. # 2 楼答案

    看看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();