使用SQLData和OracleCallableStatement Struct Mapping时的InstantiationException

时间:2013-09-03 17:21:29

标签: oracle object jdbc struct mapping

我无法找出以下问题的答案。希望有人可以帮助我。我正在将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! 提前谢谢

1 个答案:

答案 0 :(得分:0)

我忘记了默认构造函数

public DK1(){}