私はあなたのコードを取得し、いくつかの小さな変更を加えて実行しました。
私の配列TYPEオブジェクトはこれです:
create or replace
TYPE TBL_ARRAY_VARCHAR2 AS TABLE OF VARCHAR2(80);
私のコードは次のようになります。
try {
Connection con;
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection(
"jdbc:oracle:thin:@myhost:1521:LX1120", user,
password);
ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor(
"TBL_ARRAY_VARCHAR2", con);
ARRAY array = new ARRAY(arrayDescriptor, con, new String[] { "1",
"2", "3" });
Object oArray = array.getArray();
System.out.println(oArray.getClass().getName());
if (oArray instanceof String[]) {
String[] oArrayString = (String[]) oArray;
for (int i = 0; i < oArrayString.length; i++) {
System.out.println(i + ":" + oArrayString[i]);
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
実行すると次のように表示されます。
[Ljava.lang.String;
0:1
1:2
2:3
だから、あなたがやろうとしていることは何も悪いことではありません...
多くの異なるバージョンの Oracle と異なる Oracle JDBC ドライバーを使用した作業に基づいて、JDBC ドライバーのバージョンとデータベースのバージョンが一致していないと推測されますが、それは単なる推測です。私があなたなら、サーバーから JDBC ドライバーをコピーして、もう一度やり直します。名前は変わっていなくても、ドライバーの内容は変わる可能性があるので、名前を比較するだけでは十分ではないことに注意してください。
デビッド・ロルフ