我无法找出以下问题的答案。希望有人可以帮助我。我正在将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);
在这个程序中失败了,虽然我在过去几天里尝试了很多东西,但我无法让它运行!我得到了
线程“main”java.sql.SQLException中的异常:Java不一致 ans SQL-Objecttypes:InstantiationException:com.gwb.db.objects.DK1
如果我用getSTRUCT替换getObject,我会看到DB过程正常工作并按预期返回值。我无法弄清楚为什么我无法映射JAVA对象。
我会非常感谢任何帮助或者tipps! 提前谢谢
答案 0 :(得分:0)
我忘记了默认构造函数
public DK1(){}