1

JDBC を使用して空間データベース アプリを開発していますが、データベースに挿入したポリゴンのコーディネーターを取得する際に問題が発生しました。取得したのは、ベース タイプ Number の oracle.sql.Array です。コーディネーターを文字列配列に入れ、それらを 1 つずつ取得してマップ上にペイントします

SHAPE.SDO_ORDINATES

NUMBER(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 のドキュメントのコード ブロックを使用しましたが、2 番目の getArray() は意味がありません 。 /javase/tutorial/jdbc/basics/array.html#retriving_array

しかし、2 番目の getArray() がなければ、コードをコンパイルすることさえできません。

4

1 に答える 1

0

列の結果のすべての値を文字列配列に型キャストする代わりに、オブジェクト配列にキャストできます。後で使用して列タイプを確認します

metaData.getColumnType(int column)

columnType が NUMERIC 型の場合、それを として抽出し、それに対して aBigDecimalを呼び出してtoString()、それを に変換することができます。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 に答える