从数据库中检索某些特定表

时间:2017-10-03 13:55:25

标签: java jdbc

我在数据库中有很多表,但我想从某些特定表中检索数据

我这样做如下:

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

还想检查这些表是否包含数据。请建议。

1 个答案:

答案 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 - 在模式中转义。