如何在 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
我有一个自定义 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