【问题标题】:How to get names of Objects inside Custom Oracle Types in JDBC如何在 JDBC 中获取自定义 Oracle 类型中的对象名称
【发布时间】:2016-09-04 18:10:31
【问题描述】:

我有一个自定义的 Oracle 类型,如下所示

CREATE TYPE bank_account AS OBJECT ( 
ACC_NUMBER(5),
BALANCE     NUMBER,
STATUS      VARCHAR2(10));

我在 JDBC 中使用 STRUCT 类来获取类型内部的值。我能够以ARRAY [54453, 23234, 'ACTIVE'] 的形式获取存储在类型 (bank_account) 中的值。
但无论如何我都无法获得与它对应的对象名称,例如 "ACC_NUMBER""BALANCE""STATUS"

我见过JPublisher 创建与sql 类型对应的类。但是有没有其他直接的方法可以直接在 jdbc 中获取类型对象内的对象名称的元数据

【问题讨论】:

    标签: java oracle jdbc oracle-type


    【解决方案1】:

    是的,您可以使用 StructDescriptor 和 ResultSetMetaData 类。我假设您在 Oracle 中调用存储过程(在我的代码中,第一个参数是一个 int(IN 参数),第二个参数是一个 bank_account,它是一个 OUT 参数)

    JDBC 代码

      String sqlQuery = "{ call some_procedure(?, ?)}";
      final StructDescriptor structDescriptor = StructDescriptor.createDescriptor("bank_account", conn);        
      final ResultSetMetaData metaData = structDescriptor.getMetaData();
      CallableStatement stmt= conn.prepareCall(sqlQuery);
      stmt.setInt(1, 150);
      stmt.registerOutParameter(2, java.sql.Types.STRUCT, "bank_account");
    
      stmt.execute();
    
      Object o = stmt.getObject(2); // this will return an OUT param either as a STRUCT object or a bank_account object. A bank_account will be returned if your Java bank_account class has implemented the SQLData interface.
    
      for(int i = 1; i <= metaData.getColumnCount(); ++i)
              System.out.println(metaData.getColumnName(i)); //this will print attribute names
    

    代码应该打印出来

      ACC_NUMBER
      BALANCE
      STATUS
    

    【讨论】:

    • 你为什么不接受答案然后让其他人从中受益?
    • 对不起。我是堆栈溢出的新手,不知道存在这样的选项。我现在接受了
    • 这不适用于 oracle 19 structdescriptors 已弃用
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2019-08-30
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多