DatabaseMetadata.getColumns与sql server jdbc驱动程序有关

时间:2013-01-25 12:45:26

标签: sql-server jdbc

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

1 个答案:

答案 0 :(得分:0)

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