我的代码非常复杂,因此无法全部显示,但是这一部分非常简单。

我有一个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;

最佳答案

除非您以某种方式弄坏了jdbc驱动程序,否则在对ResultSet调用.getMetaData()之前,在Connection上调用.getMetaData()之间应该没有问题。您很可能不小心更改了toUse的值。确认您没有意外更改其值的一种方法是使局部变量为final。

附言代替这个:

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 = ",  ";
}


循环内不需要分支条件。

10-08 02:20