Java中无法从ResultSet取值填充jLabel的技术问题求助
解决jLabel不更新SQL查询结果的问题
嘿,你遇到的这个问题其实很常见——ResultSet对象刚创建时,游标是指向第一行数据之前的位置,直接调用getDouble(1)根本拿不到任何数据,这就是为什么替换成固定值就正常,用查询结果就没反应啦!
你需要先调用rs.next()把游标移动到第一行(因为你的查询肯定会返回一行结果),之后再去获取数值。修改后的代码应该是这样的:
String sum = "SELECT SUM(TOTAL) FROM PUNCHES WHERE EID = 1"; Statement st = con.createStatement(); ResultSet rs = st.executeQuery(sum); // 关键一步:移动游标到结果行 if (rs.next()) { double d = rs.getDouble(1); lblGrandTotal.setText(String.valueOf(d)); } // 别忘了用完关闭资源,避免内存泄漏 rs.close(); st.close();
简单说下关键点:
rs.next()会返回布尔值,判断是否存在有效数据行,你的查询只会返回一行,用if判断就足够;- 只有游标移动到有效行后,
getDouble(1)才能正确读取SUM的计算结果; - 最后记得关闭Statement和ResultSet,这是数据库编程的良好习惯,能避免不必要的资源浪费。
另外,如果你担心没有符合条件的记录时SUM返回NULL,可以加个空值处理:
if (rs.next()) { if (!rs.wasNull()) { double d = rs.getDouble(1); lblGrandTotal.setText(String.valueOf(d)); } else { lblGrandTotal.setText("0.00"); // 设置你想要的默认显示值 } }
这样就能完美解决你的问题啦!
内容的提问来源于stack exchange,提问作者Chris R
相关产品推荐
相关产品推荐

