【发布时间】:2015-02-20 08:12:29
【问题描述】:
我在获取 ResultSet 的列名别名时遇到问题。
我做了一个子查询,我在其中使用别名函数(SQL 中的 MAX(...)),但每次执行语句时,我都会得到 java.sql.SQLException,因为列名无效。我使用当前别名调用 getString - 我的 ResultSet 的函数。
这是我在 Eclipse 中的 SQL 语句:
String sql = "SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos, "
+"a.prod_order_version, a.strip_thickn_aim, a.strip_width_aim, "
+"a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight "
+"FROM (SELECT prod_order_id, prod_order_item_pos, "
+ "MAX (prod_order_version) AS max_version "
+ "FROM production_order "
在结果集中while.next()-Loop:
prod_order_version = AuftraegeProduction.getString("max_version");
这是整个 SQL 语句(在数据库中它工作正常!):
SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos,
a.prod_order_version, a.strip_thickn_aim, a.strip_width_aim,
a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight
FROM (SELECT prod_order_id, prod_order_item_pos,
MAX (prod_order_version) AS max_version
FROM production_order
GROUP BY prod_order_id, prod_order_item_pos) c
JOIN
production_order a
ON a.prod_order_id = c.prod_order_id
AND a.prod_order_item_pos = c.prod_order_item_pos
AND a.prod_order_version = c.max_version
JOIN pps_plan_slab b
ON b.prod_order_id = c.prod_order_id
AND b.prod_order_item_pos = c.prod_order_item_pos
AND b.prod_order_version = c.max_version
WHERE a.strip_thickn_aim > 1.78
AND a.strip_thickn_aim < 3.26
AND a.steelgrade = 'M4R51'
AND a.prod_order_id NOT BETWEEN '0999551' AND '0999599'
AND a.strip_width_aim BETWEEN 1126 AND 1166
AND NVL (a.order_weight_plan, 0) > 0
AND a.order_weight_plan >= b.coil_weight
ORDER BY prod_order_id ASC
有人有什么建议吗?
莫里斯
【问题讨论】:
-
您是否尝试直接在数据库中手动运行查询?似乎它缺少了一些东西......也许
group by?顺便说一句,如果您标记您正在使用的数据库,将不胜感激...... -
是的,我之前在数据库中执行了语句,以检查我的 SQL 查询是否一切正常。在数据库中,它可以工作!在这种情况下,我使用 Oracle 数据库。
-
首先,您缺少一个右括号 - 所以它不可能“按原样”运行。二、不分组真的能跑:
SELECT prod_order_id, prod_order_item_pos, MAX (prod_order_version) AS max_version FROM production_order吗?可能我太久没接触Oracle DB了…… -
我创建了一个“GROUP BY”,但还是不行:“...GROUP BY prod_order_id, prod_order_item_pos) c
-
正如我在最初的评论中所写的:首先让查询在数据库上运行,然后开始担心让它与您的代码一起工作!
标签: java sql jdbc alias resultset