1

我正在使用 JDBC 开发空间数据库应用程序,现在我在检索插入数据库的多边形的协调器时遇到问题,我得到的是一个基本类型为 Number 的 oracle.sql.Array,我的想法是获取协调器到一个字符串数组中,并让它们一一绘制在地图上

形状.SDO_ORDINATES

号码(79,68,184,125,179,133,189,138,139,229,131,225,127,233,21,175,26,168,18,163,67,73,74,76)

以下是我的代码:

try{
 Statement stmt = conn.createStatement();
 String fetchBuidling = "select a.shape.sdo_ordinates from buildings a";
 ResultSet rs = stmt.executeQuery(fetchBuidling);

 while(rs.next()){
    ResultSetMetaData metaData = rs.getMetaData();
    int columns = metaData.getColumnCount();
    Array coordsInfo = rs.getArray(columns);
    String[] vertice = (String[]) coordsInfo.getArray();
    for(int i = 0 ; i < vertice.length; i++){
    System.out.println(vertice[i]);
    }  
}

错误是"java.lang.ClassCastException: [Ljava.math.BigDecimal; cannot be cast to [Ljava.lang.String;";我使用了 Oracle 文档中的代码块,尽管第二个 getArray() 对我来说没有意义,因为在这种情况下它提到 coordsInfo 应该是一个逻辑指针,链接是 http://docs.oracle.com /javase/tutorial/jdbc/basics/array.html#retrieving_array

但是没有第二个 getArray() 我什至无法编译代码,任何人都可以帮忙,我对此感到非常沮丧

4

1 回答 1

0

您可以将其转换为 Object 数组,而不是将列的所有结果值类型转换为 String 数组。稍后使用

metaData.getColumnType(int column)

如果 columnType 是 NUMERIC 类型,那么您可能希望将其提取为 aBigDecimal并在其上调用 atoString()以将其转换为String

邪恶的黑客(不要告诉任何人我建议这个):

    Object[] vertice = (Object[]) coordsInfo.getArray();
    for(int i = 0 ; i < vertice.length; i++){
       System.out.println(vertice[i].toString());
    }  
于 2012-10-30T09:58:57.423 回答