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

Java DatabaseMetaData.getColumns() method doesn't work for all users

我在 Oracle 数据库中有一些用户,假设 UserOne、UserTwo 和 UserTree 具有相同且不为空的 table,名称为 - "tableExample".

在我的例子中,我需要通过 getColumns() 方法初始化 ResultSet:

DatabaseMetaData md = conn.getMetaData();

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

在上面的例子中 r.next() 是正确的,但是当我使用 UserOne 或 UserTree 时 r.next() 是错误的。

无论我选择了哪个用户,我该如何解决这个问题来实现这个 table 的结果集?

*如果我使用:

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

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

来自apidocs

schemaPattern - a schema name pattern; must match the schema name as it is stored in the database; [...]

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

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

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

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