2012-06-26 2 views
2

i wan для получения данных из запроса, включающего множество таблиц. У меня есть следующий запросJDBC ResultSet получить столбец из разных таблиц

String sql = "SELECT " 
      + "s.Food_ID AS 'Sales_FoodID', " 
      + "f.Food_Name AS 'foodName' " 
      + "FROM Ordering o, Sales s, Food f" 
      + " WHERE o.Table_No = " + tableNo + "" 
      + " AND o.Paid = '" + NOT_PAID + "'" 
      + " AND s.Order_ID = o.Order_ID" 
      + " AND f.Food_ID = s.Food_ID;"; 
    resultSet = statement.executeQuery(sql); 

ошибки не были обнаружены, когда я запустить программу, но после того, как я добавить эту строку, чтобы получить данные колонки за столом в:

String orderID = resultSet.getString("foodName"); 

Я дал эту ошибку :

java.sql.SQLException: Column not found 

Кто-нибудь знает почему?

+0

установить точку останова на 'Строка = resultSet.getString идентификатор заказа (» foodName ");' и посмотреть, что содержит 'resultSet'. – ZnArK

+0

@ZnArK Это происходит потому, что ResultSet.getString (String) выбирает для столбца его имя, а не его псевдоним/метку. На самом деле это ответ на вопрос «кто-нибудь знает почему?», Но поскольку он не решит проблему, я оставлю это в качестве комментария. – Goodwine

ответ

4

Вы должны использовать метод next().

Вы должны знать, что ResultSet неявно позиционируется в позиции перед первой строкой, поэтому вам нужно позвонить рядом с получением текущей позиции, и если она действительна, она возвращает true, иначе возвращается false (курсор расположен после последней строки).

rs = statement.executeQuery(sql); 
while (rs.next()) { 
    String orderID = rs.getString(2); 
} 


Примечание: Вы также можете использовать rs.getString(<columnName>), но в том случае, когда вы знаете, как ваше заявление выглядит я рекомендую вам использовать индекс вместо ColumnName.

0

После вызова resultSet.executeQuery() вы должны вызвать next() выдергиванию записи из БД

после этого вы можете позвонить setXxx() обеспечивается Java API

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