2015-02-11 3 views
1

Я пытаюсь отобразить свою базу данных в текстовой области в java. Приведенный ниже код работает, однако он показывает «[email protected]» вместо данных. Любые идеи, почему? и как я могу исправить этуПочему это возвращает «[email protected]»

Мой код

public static String listAll() { 
    String output = listHeader(); 
    try { 
     ResultSet res = stmt.executeQuery("SELECT * from STUDENT.MESSAGES"); 
     while (res.next()) { // there is a result 
      //output += formatListEntry(res); 
      output += res; 
      output +=System.lineSeparator(); 
     } 
    } catch (Exception e) { 
     System.out.println(e); 
     return null; 
    } 
    return output; 
} 

ответ

0

Вот почему: output += res;

разрешением является org.apache.derby.client.net.NetResultSet и что класс не переопределяет toString().

+0

Здравствуйте, Благодарим за помощь. Теперь он работает, однако отображаемые данные абсолютно неверны? это не имеет смысла. –

0

res.toString() вернется [email protected]

вы должны изменить:

output += res; 

в

output = res.getString(0); 

, чтобы увидеть первое значение и добавить все остальное в таком же стиле.

3

ResultSet не реализует метод toString, поэтому то, что вы видите, представляет собой реализацию по умолчанию, определенную в Object#toString.

Вы должны вместо этого получить данные из ResultSet используя ResultSet#getXyz метод:

ResultSet res = stmt.executeQuery("SELECT * from STUDENT.MESSAGES"); 
while (res.next()) { // there is a result 
    //output += formatListEntry(res); 
    output += res.getString("column1"); 
    output += " "; 
    output += res.getString("column2"); 
    output +=System.lineSeparator(); 
} 

Некоторые рекомендации:

  • В запросах, получить соответствующие столбцы, не используйте "*". Используйте это только для целей тестирования .
  • При чтении данных от ResultSet лучше использовать имена столбцов, а не ожидаемый индекс. Это на случай, если кто-то другой изменит таблицу и добавит столбец посередине, а также поможет прочитать и отлаживать код.
  • Если вам нужно прочитать несколько строк из базы данных, лучше вернуть List<YourObject>, а не гигантскую строку.
+0

или вы можете использовать res.getString (1) для первого столбца и так далее, возможно, с циклом for –

+0

@ JackTools.Net прочитал рекомендации. Лучше использовать '' columnName ", а не индексы из-за изменений в запросе, особенно когда кто-то добавляет столбец посередине. –

+0

Зависит от того, что вы хотите сделать. –

Смежные вопросы