Java DatabaseMetaData.getColumns()方法不适用于所有用户

时间:2017-11-22 19:55:01

标签: java sql oracle oracle-sqldeveloper database-metadata

我在Oracle数据库中有一些用户,让我们说UserOne,UserTwo和UserTree有相同而不是空表的名称 - “tableExample”。

在我的情况下,我需要通过 getColumns()方法初始化ResultSet:

DatabaseMetaData md = conn.getMetaData();

ResultSet r = md.getColumns(null, "UserTwo", "tableExample", null);
while(r.next())
{
//Do something;
}

在上面的示例中,r.next()为true,但是当我使用UserOne或UserTree时,r.next()为false。

如何解决此问题,以便无论我选择哪个用户,都可以实现此表的ResultSet?

*如果我使用:

ResultSet r = md.getColumns(null, null, "tableExample", null); 

我将收到所有用户进入数据库的结果,但我需要使用此方法中的第二个参数动态地将用户具体化。

1 个答案:

答案 0 :(得分:1)

来自apidocs

  

schemaPattern - 架构名称模式;必须匹配模式名称,因为它存储在数据库中; [...]

所以这是一种模式,但遗憾的是没有提示该方法预期的模式类型,但您可能只是尝试一下:

ResultSet r = md.getColumns(null, "User*", "tableExample", null);
ResultSet r = md.getColumns(null, "User.+", "tableExample", null);

或者你可以直接使用oracle的系统表(apidoc表示10g):

String sql = "SELECT * FROM SYS.ALL_TAB_COLUMNS WHERE OWNER LIKE 'User%'";
ResultSet r = conn.createStatement().executeQuery(sql);