[英]Is it possible to get metadata on a nested table/array from Java code?
通常对于用户定义的类型,我可以简单地执行以下操作(简化但功能示例):
//Create table
create type myType1 as object( a char(2), b char(2) );
create type myTable1 as table of myType1;
//Java code
ArrayDescriptor des = ArrayDescriptor.createDescriptor( "MYTABLE1", con);
StructDescriptor sDes = StructDescriptor.createDescriptor( des.getBaseName(), con);
//Populte the metadata
String columnName = sDes.getColumnName(0);
int oracleType = sDes.getColumnType(0);
int maxSize = sDes.getColumnDisplaySize(0);
boolean isNullable = sDes.isNullable(0)>0;
除了现在我有一个用原始类型而不是结构定义的表,我似乎无法访问元数据。 我目前的代码是:
//Create table
create or replace type myTable2 as table of char(2);
//Java code
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor( "MYTABLE2", con);
//This next line would throw an exception, as CHAR type is not a structure
//StructDescriptor sDes = StructDescriptor.createDescriptor( des.getBaseName(), con);
//Populte the metadata
int oracleType = descriptor.getBaseType(); // This Works
String columnName = "COLUMN_VALUE"; // This Works (I think)
int maxSize = ???? // How do I access the '2'?
boolean isNullable = ???? // How do I access isNullable?
我希望我理解你。 如果您可以获得列信息,可以尝试以下代码。
DatabaseMetaData databaseMetaData = connection.getMetaData();
ResultSet columns = databaseMetaData.getColumns(null,null, tableName, null);
while(columns.next())
{
String columnName = columns.getString("COLUMN_NAME");
String datatype = columns.getString("DATA_TYPE");
String columnsize = columns.getString("COLUMN_SIZE");
String decimaldigits = columns.getString("DECIMAL_DIGITS");
String isNullable = columns.getString("IS_NULLABLE");
String is_autoIncrment = columns.getString("IS_AUTOINCREMENT");
}
有时,在Oracle DB上没有管理员权限的实际企业环境中,您可能无法依赖Java的DatabaseMetaData
类,但您可能依赖于DDL查询。 通过这种方式,我的意思是您可以像在Java应用程序中运行SQL查询一样执行DDL查询。
例如:
select t.data_type from user_tab_columns t where t.TABLE_NAME = 'MYTABLE1' and t.COLUMN_NAME='COLUMN_VALUE'
。 SELECT data_length FROM all_tab_columns WHERE table_name = 'MYTABLE1' AND column_name = 'COLUMN_VALUE'
。 select nullable from user_tab_columns where table_name = 'MYTABLE1' and column_name = 'COLUMN_VALUE';
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.