2014-11-03 1 views
2

Я пытаюсь вернуть значение из оператора select. Его единственное значение, потому что возвращаемое мной значение происходит из столбца первичного ключа.Получение одного значения из оператора SQL select в Java

SQL-оператор является SELECT itemNo FROM item WHERE itemName = 'astringvalue';

Мой метод для получения значения выглядит следующим образом:

private String viewValue(Connection con, String command) throws SQLException 
    { 
     String value = null; 
     Statement stmt = null; 

     try 
     { 
      stmt = con.createStatement(); 
      ResultSet rs = stmt.executeQuery(command); 

      while (rs.next()) 
       value = rs.toString(); 
     } 

     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 

     finally 
     { 
      if (stmt != 
      null) { stmt.close(); } 
     } 

     return value; 

    } 

У меня есть метод getConnection() тоже.

Вот что им с помощью вызвать метод viewValue:

if((action.getSource() == btnSave) ||(action.getSource() == btnSavePrint)) 
     { 
      String findItemNoCommand = "SELECT itemNo FROM `item` WHERE itemName = '" + itemList.getSelectedItem() + "'"; 

      try 
      { 
       itemNo = viewValue(conn, findItemNoCommand); 
      } 
      catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 

      System.out.println(itemNo); 
     } 

Код выше был написан для ButtonHandler

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

Мой вопрос: что я могу использовать там, который может работать?

Любая помощь или подсказка относительно того, что я делаю неправильно, очень ценится.

+5

Вам нужно 'value = rs.getString (1);' – OldCurmudgeon

+4

И измените 'while (rs.next())' на 'if (rs.next())', поскольку вам нужно только одно значение. – qkzhu

ответ

4
Right now, for the println I'm getting a "[email protected]" 

потому, что вы вернете ResultSet объект здесь, value = rs.toString();

С docs,

Объект ResultSet представляет собой таблицу данных, представляющая результат базы данных набора, который обычно генерируется путем выполнения инструкции, запрашивающей базы данных

Вы получаете доступ к данным в объекте ResultSet с помощью курсора. Обратите внимание: этот курсор не является курсором базы данных. Этот указатель указывает на то, что указывает на одну строку данных в ResultSet. Первоначально курсор , расположенный перед первой строкой. Метод ResultSet.next перемещает курсор в следующую строку. Этот метод возвращает false, если курсор , расположенный после последней строки. Этот метод повторно вызывает метод ResultSet.next с циклом while для повторения всех данных в ResultSet.

Вы должны сказать, результирующий набор, чтобы получить значение из колонки,

value = rs.getString(1); 

через индекс

value = rs.getString("itemNo"); 

или через имя столбца

1

Изменение:

value = rs.toString(); 

Кому:

value = rs.getString(1); 

rs.toString возвращает результат toString метода объекта ResultSet. rs.getString(1) дает первый параметр набора результатов как String.

1

Используйте rs.getInt(1) или rs.getString(1) для извлечения фактического значения из ResultSet. Затем прочитайте учебник JDBC.

0

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

while (rs.next()) 
    value = rs.toString(); 

в

while (rs.next()) 
    value = rs.getString("itemNo"); 
0

Попробуйте:

private String viewValue(Connection con, String command) throws SQLException 
{ 
    String value = null; 
    Statement stmt = null; 

    try 
    { 
     stmt = con.createStatement(); 
     ResultSet rs = stmt.executeQuery(command); 

     while (rs.next()) 
      value = rs.getString(1); 
    } 

    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 

    finally 
    { 
     if (stmt != 
     null) { stmt.close(); } 
    } 

    return value; 

} 
1

изменить его

if(rs.next()) 

и

rs.getString("itemNo"); 

работ !!!