【问题标题】:JDBC ResultSet get column from different tablesJDBC ResultSet 从不同的表中获取列
【发布时间】:2012-06-26 16:10:10
【问题描述】:

我想从涉及许多表的查询中检索数据。 我有一个查询如下

    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

有人知道为什么吗?

【问题讨论】:

  • String orderID = resultSet.getString("foodName"); 上设置断点并查看resultSet 包含的内容。
  • @ZnArK 发生这种情况是因为 ResultSet.getString(String) 按其名称而不是其别名/标签来获取列。这实际上是“有人知道为什么吗?”这个问题的答案,但由于它不能解决问题,所以我将其作为评论留下。

标签: jdbc


【解决方案1】:

你必须使用next() 方法。

您应该知道 ResultSet 隐式定位在第一行之前的位置,因此您需要调用 next 来获取当前位置,如果有效,则返回 true,否则返回 false(光标为位于最后一行之后)。

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


注意:您也可以使用 rs.getString(<columnName>),但如果您知道自己的语句看起来如何,我建议您使用 index 而不是 columnName。

【讨论】:

    【解决方案2】:

    调用resultSet.executeQuery()后,你需要调用next()从数据库中提取记录

    之后可以调用Java API提供的setXxx()

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 2011-11-05
      • 2014-06-25
      • 2017-05-12
      • 2018-07-19
      • 1970-01-01
      • 2014-02-15
      • 2015-07-15
      • 2013-02-11
      相关资源
      最近更新 更多