JDBC为什么它会返回所有可用的表?

时间:2011-12-05 17:22:30

标签: java jdbc

我有相当复杂的代码,所以我无法全部显示,但这部分非常简单。

我有一个SELECT * FROM myTable,它返回一个应该打印它的方法的结果集,toUse是传递给这个方法的结果集的名称:

ResultSetMetaData rsmd = (ResultSetMetaData) toUse.getMetaData();      

          System.out.println("");

          int numberOfColumns = rsmd.getColumnCount();

          for (int i = 1; i <= numberOfColumns; i++) {
            if (i > 1) System.out.print(",  ");
            String columnName = rsmd.getColumnName(i);
            System.out.print(columnName);
          }
          System.out.println("");

          while (toUse.next()) {
            for (int i = 1; i <= numberOfColumns; i++) {
              if (i > 1) System.out.print(",  ");
              String columnValue = toUse.getString(i);
              System.out.print(columnValue);
            }
            System.out.println("");
          }

而不是打印出我选择的表格,而不是激活SHOW TABLES;命令?

编辑:

我认为这与之前的运行有关:

java.sql.DatabaseMetaData meta = con.getMetaData();
        results = meta.getTables(null, null, null, new String[]{"TABLE"});

        while (results.next()) {

          String tableName = results.getString("TABLE_NAME");
          if(tableName.equals(parameters)){
              return true;
          }

        }
    results.close();
    return false;

1 个答案:

答案 0 :(得分:1)

除非你以某种方式得到一个破坏的jdbc驱动程序,否则在Connection上调用.getMetaData()之前调用连接上的.getMetaData()之间应该没有问题。你很可能不小心改变了toUse的值。验证您没有意外更改其值的一种方法是使本地变量最终。

P.S。而不是:

for (int i = 1; i <= numberOfColumns; i++) {
    if (i > 1) System.out.print(",  ");
    String columnValue = toUse.getString(i);
    System.out.print(columnValue);
}

这样做:

String delimiter = "";
for (int i = 1; i <= numberOfColumns; i++) {
    String columnValue = toUse.getString(i);
    System.out.print(delimiter);
    System.out.print(columnValue);
    delimiter = ",  ";
}

不需要循环内的分支条件。