0

我正在尝试获取表名中具有特殊字符的表的元数据。在正常情况下,我的代码工作正常,但我有一个表“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)添加其他组合并查找您收到的相同结果集的记录数。它将根据您的选择而有所不同。

4

1 回答 1

0

的第三个参数DatabaseMetaData.getColumns(...)称为tableNamePattern。它是一种LIKE模式,而不是文字。在LIKE- 模式中,反斜杠 ( \) 是转义字符。因此,如果要匹配名为 的表TABLE[]}\|ABC,则需要使用模式TABLE[]}\\|ABC(注意双斜杠),它作为 Java 字符串将是"TABLE[]}\\\\|ABC".

于 2013-01-26T20:00:46.517 回答