0

我无法找出以下问题的答案。希望有人能帮助我。我将 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 对象。

我将非常感谢任何帮助或提示!先感谢您

4

1 回答 1

0

我忘记了默认构造函数

公共 DK1() { }

于 2013-09-04T10:03:30.920 回答