JDBC Почему он возвращает мне все доступные таблицы? - PullRequest
0 голосов
/ 05 декабря 2011

У меня довольно сложный фрагмент кода, поэтому я не могу показать все это, но эта часть очень проста.

У меня есть 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 Ответ

1 голос
/ 27 января 2012

Если у вас каким-то образом не работает сломанный драйвер jdbc, не должно быть проблем между вызовом .getMetaData () в Connection до вызова .getMetaData () в ResultSet.Скорее всего, вы случайно изменили значение toUse.Один из способов проверить, что вы случайно не изменили ее значение, - сделать вашу локальную переменную окончательной.

PS Вместо этого:

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

Нет необходимости в условии ветвления внутри вашего цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...