次の問題の答えがわかりません。誰かが私を助けてくれることを願っています。ここで説明されているように、JAVA クラスを Struct にマッピングしています 。
私はOracleオブジェクトを持っています:
create or replace TYPE DK1 AS OBJECT( zahl CHAR(1) );
および対応する Java クラス:
public class DK1 implements SQLData {
private String sql_type;
public static final int _SQL_TYPECODE = OracleTypes.STRUCT;
private String zahl;
public DK1(String sql_type, String z) {
this.sql_type = sql_type;
setZahl(z);
}
public String getSQLTypeName() throws SQLException {
return sql_type;
}
public void readSQL(SQLInput stream, String typeName) throws SQLException {
sql_type = typeName;
this.setZahl(stream.readString());
}
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeString(getZahl());
}
public String getSql_type() {
return sql_type;
}
public void setSql_type(String sql_type) {
this.sql_type = sql_type;
}
public String getZahl() {
return zahl;
}
public void setZahl(String zahl) {
this.zahl = zahl;
}
}
私のテスト方法は次のとおりです。
public class SQLDataExample {
public static void main(String args[]) throws Exception {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
OracleConnection conn = (OracleConnection) DriverManager.getConnection(
"jdbc:oracle:thin:@................", "...",
"...");
Dictionary<String, Class<?>> map = (Dictionary) conn.getTypeMap();
map.put("BONI.DK1", Class.forName("com.gwb.db.objects.DK1"));
OracleCallableStatement cs = (OracleCallableStatement) conn.prepareCall("{call BOX.DK(?)}");
DK1 dd = new DK1("BONI.DK1", "1");
cs.setObject(1, dd);
cs.registerOutParameter(1, OracleTypes.STRUCT, "BONI.DK1");
cs.execute();
DK1 df = (DK1) cs.getObject(1);
}
}
さぁ、最後のステップ
DK1 df = (DK1) cs.getObject(1);
この手順は失敗し、ここ数日で非常に多くのことを試しましたが、実行できません! 私は得る
スレッド「メイン」で例外が発生しました
getObject を getSTRUCT に置き換えると、DB プロシージャが機能し、期待どおりに値が返されることがわかります。JAVA オブジェクトをマップできない理由がわかりません。
助けやヒントをいただければ幸いです。前もって感謝します