java显示SDO_GEOMETRY类型属性的值
我试图使用JDBC来显示在Oracle 11g数据库中创建的表中的行,问题是我无法使用以下代码获取“SDO_GEOMETRY”类型的属性“SHAPE”的值,顺便说一句,对于表的其他属性,该代码可以很好地工作:
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("Driver O.K.");
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "system";
String passwd = "isima";
Connection conn = DriverManager.getConnection(url, user, passwd);
System.out.println("Connexion effective");
Statement myStmt = null;
ResultSet myRs = null;
myStmt = conn.createStatement();
myRs = myStmt.executeQuery("SELECT * FROM testGeo");
while (myRs.next()) {
System.out.println(myRs.getString("shape"));
}
} catch (Exception e) {
e.printStackTrace();
}
以下是用于创建testGeo表和一些测试数据的DDL语句
CREATE TABLE testGeo (
GeoID NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape SDO_GEOMETRY);
INSERT INTO testGeo VALUES(
1,
'cola_a',
SDO_GEOMETRY(
2003,
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(1,1, 5,7)
)
);
INSERT INTO testGeo VALUES(
2,
'cola_b',
SDO_GEOMETRY(
2003,
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(2,1, 6,7)
)
);
INSERT INTO testGeo VALUES(
3,
'cola_c',
SDO_GEOMETRY(
2003,
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(1,1, 9,9)
)
);
# 1 楼答案
问题本身是由于您试图检索一个复杂对象造成的,该对象是一个自定义Oracle对象,应该使用其自己的映射库来处理在您的示例语句中使用的
SDO_GEOMETRY
类型:是Oracle Spatial软件包的一部分,依赖于自定义对象。这些不能像
VARCHAR
或NUMBER
这样的基本SQL列那样容易读取,这就是为什么getString("shape")
调用不会产生任何结果解决方案是使用Oracle提供的JGeometry package,它正是为此目的而设计的:
通过类路径上的这个库,您可以使用自定义Java映射来操作shape对象:
# 2 楼答案
我认为错误在于
getString()
,因为SDO_几何体无法转换为字符串。老实说,我对oracleDB一无所知,所以这只是一个猜测你试过
getInt()
或getByteArray()
或类似的选择吗从数据库中获取数据有很多可能性