我无法找出以下问题的答案。希望有人能帮助我。我将 JAVA 类映射到 Struct,如下所述:http: //docs.oracle.com/cd/F49540_01/DOC/java.815/a64685/samapp4.htm
我有一个 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);
在这个过程中失败了,虽然我在过去的几天里尝试了很多东西,但我无法让它运行!我得到一个
线程“主”java.sql.SQLException 中的异常:Java-ans SQL-Objecttypes 不一致:InstantiationException:com.gwb.db.objects.DK1
如果我用 getSTRUCT 替换 getObject,我会看到 DB 过程正常工作并按预期返回值。我无法弄清楚为什么我无法映射 JAVA 对象。
我将非常感谢任何帮助或提示!先感谢您