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

How to get names of Objects inside Custom Oracle Types in JDBC

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

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

我在 JDBC 中使用 STRUCT class 来获取类型中的值。我能够将类型 (bank_account) 中存储的值作为 ARRAY [54453, 23234, 'ACTIVE'].
但是我无法通过任何方式获得与之对应的对象名称,例如 "ACC_NUMBER""BALANCE""STATUS"

我看到 JPublisher 创建了对应于 sql 类型的 classes。但是有没有其他直接的方法可以直接在 jdbc

中获取类型对象内对象名称的元数据

是的,您可以使用 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