我在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);
我将收到所有用户进入数据库的结果,但我需要使用此方法中的第二个参数动态地将用户具体化。
答案 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);