我在数据库中有很多表,但我想从某些特定表中检索数据
我这样做如下:
DatabaseMetaData md = conn.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
System.out.println(rs.getString(3));
}
但是从这里我得到了数据库中的所有表格。但我想只检索一些具有特定模式的表。模式是这样的
a_employee_raw
a_employee2_raw
b_employee_raw
b_employee2_raw
还想检查这些表是否包含数据。请建议。
答案 0 :(得分:1)
您检查了the documentation of DatabaseMetaData.getTables
吗?它说:
tableNamePattern
- 表名模式;必须与表名匹配 因为它存储在数据库中
DatabaseMetaData
的介绍文字说:
一些
DatabaseMetaData
方法接受String的参数 图案。这些参数都有fooPattern
等名称。内 模式字符串,“%
”表示匹配0或更多的子字符串 字符和“_
”表示匹配任何一个字符。只有元数据 返回与搜索模式匹配的条目。如果是搜索模式 参数设置为null
,该参数的标准将被删除 来自搜索。
换句话说,它表现为LIKE
搜索。假设您的特定数据库以大写形式存储表名(检查storesUpperCaseIdentifiers()
和元数据中的朋友),您可以使用以下内容:
md.getTables(null, null, "__EMPLOYEE%_RAW", null);
这可能会稍微宽一些,因为第二个和第三个_
将匹配任何字符,而不仅仅是文字下划线,%
将匹配数字以外的其他内容。
如果您的数据库默认以小写形式存储表(或者如果这些表创建引用且实际存储为小写),那么您需要使用:
md.getTables(null, null, "__employee%_raw", null);
请注意,最好使用以下内容来解决比文字下划线(_
)更宽的匹配问题
md.getTables(null, null, "_\\_EMPLOYEE%\\_RAW", null);
但我不确定所有JDBC驱动程序是否实际支持SQL LIKE
- 在模式中转义。