是否可以从Java代码中获取嵌套表/数组上的元数据?
通常,对于用户定义的类型,我可以简单地执行以下操作(简化但功能性的示例): 除了现在我有一个用基元类型而不是结构定义的表,而且我似乎无法访问元数据。我目前的代码是:是否可以从Java代码中获取嵌套表/数组上的元数据?,java,oracle,jdbc,nested-table,Java,Oracle,Jdbc,Nested Table,通常,对于用户定义的类型,我可以简单地执行以下操作(简化但功能性的示例): 除了现在我有一个用基元类型而不是结构定义的表,而且我似乎无法访问元数据。我目前的代码是: //Create table create or replace type myTable2 as table of char(2); //Java code ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor( "MYTABLE2", con); //Thi
//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查询
例如:
从用户选项卡中选择t.data\u type\u columns t,其中t.TABLE\u NAME='MYTABLE1'和t.column\u NAME='column\u VALUE'
从所有的\u选项卡\u列中选择数据\u长度,其中table\u name='MYTABLE1'和column\u name='column\u VALUE'
从user_tab_列中选择可空,其中table_name='MYTABLE1'和column_name='column_VALUE'代码>
我无法获取此表的列信息。行
ResultSet columns=databaseMetaData.getColumns(null,null,tableName,null)
返回一个空的结果集。
。我更新了第一个示例,以便更好地突出显示差异。@billie我试过了,效果很好。你确定你的联系是真的吗?我用我能想到的每一种组合都试过了,但没有成功。ResultSet
始终为空。我可以使用这个方法来获取关于其他完整表的信息,但它对数组不起作用。
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");
}