我正在尝试获取表名中包含特殊字符的表的元数据。在正常情况下我的代码工作正常,但我有一个表“TABLE []} \ | ABC”,其中getColumns没有返回任何值。
ResultSet rrc = meta.getColumns("SCHEMA_NAME", null, "TABLE_NAME", "%");
我发现也有一些奇怪的行为。只需在第一个参数中传递模式名称,并在其余3个参数中传递任何其他值。
ResultSet rrc = meta.getColumns("SCHEMA_NAME", null, null, "%");
while (rrc.next()) {
System.out.println("-- col: " + rrc.getString(4));
}
只需将rrc.getString(4)(COLUMN_NAME)
更改为rrc.getString(3)(TABLE_NAME)
或添加其他组合,然后查找您为同一结果集收到的记录数。它会根据您的选择而有所不同。
答案 0 :(得分:0)
DatabaseMetaData.getColumns(...)
的第三个参数称为tableNamePattern
。它是LIKE
模式,而不是文字。在LIKE
- 模式中,反斜杠(\
)是一个转义字符。因此,如果要匹配名为TABLE[]}\|ABC
的表,则需要使用模式TABLE[]}\\|ABC
(注意双斜杠),它作为Java字符串"TABLE[]}\\\\|ABC"
。