Java 如何在JDBC中获取自定义Oracle类型中的对象名

Java 如何在JDBC中获取自定义Oracle类型中的对象名,java,oracle,jdbc,oracle-type,Java,Oracle,Jdbc,Oracle Type,我有一个自定义的Oracle类型,如下所示 CREATE TYPE bank_account AS OBJECT ( ACC_NUMBER(5), BALANCE NUMBER, STATUS VARCHAR2(10)); 我在JDBC中使用STRUCT类来获取类型中的值。我能够以数组[544532334,'ACTIVE']的形式获取存储在类型(银行账户)中的值 但我无法通过任何方式获得与之对应的对象名称,如“ACC_NUMBER”、“BALANCE”和“STATUS” 我

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

CREATE TYPE bank_account AS OBJECT ( 
ACC_NUMBER(5),
BALANCE     NUMBER,
STATUS      VARCHAR2(10));
我在JDBC中使用STRUCT类来获取类型中的值。我能够以
数组[544532334,'ACTIVE']
的形式获取存储在类型(银行账户)中的值 但我无法通过任何方式获得与之对应的对象名称,如
“ACC_NUMBER”
“BALANCE”
“STATUS”


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

是的,可以使用StructDescriptor和ResultSetMetaData类。我假设您正在调用Oracle中的存储过程(在我的代码中,第一个参数是int(in-param),第二个参数是bank_帐户,它是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