gpt4 book ai didi

java - 间歇性结果 UPDATE、DELETE、SET 或 GET 语句 : ; ResultSet is empty

转载 作者:行者123 更新时间:2023-12-01 10:19:47 25 4
gpt4 key购买 nike

我正在为大学做一项作业,使用 netbeans 中的查询来查询 MS Access 中的数据库,到目前为止,我花了整整两天的时间才完成这个作业。问题是,一旦我打开包并运行它,它就会给我一个可爱的结果。之后我收到此错误:

net.ucanaccess.jdbc.UcanaccessSQLException:无效游标状态:标识符游标未定位在 UPDATE、DELETE、SET 或 GET 语句中的行上:;结果集为空。

如果您能提供任何帮助,我将不胜感激。非常感谢。

private void FindFlghtBtnActionPerformed(java.awt.event.ActionEvent evt) {                                             

try{

rs = stmt.executeQuery("SELECT DepAirportTable.AirportName, DepAirportTable.AirportDesignaton, FlightTable.DepDate, ArrAirportTable.ArrAirportName, ArrAirportTable.ArrAirportDesignaton\n" +
"FROM PlaneTable INNER JOIN (ArrAirportTable INNER JOIN (DepAirportTable INNER JOIN FlightTable ON DepAirportTable.AirportDesignaton = FlightTable.FromAirDes) ON ArrAirportTable.ArrAirportDesignaton = FlightTable.ToAirDes) ON PlaneTable.FlightDesignationCode = FlightTable.[FlightDesignationCode]\n" +
"WHERE (((DepAirportTable.AirportName)=\""+DepCombo.getSelectedItem()+"\") AND ((FlightTable.DepDate)=#"+((JTextField)DateDep.getDateEditor().getUiComponent()).getText()+"#) AND ((ArrAirportTable.ArrAirportName)=\""+ArrComboBox.getSelectedItem()+"\"));");

rs.next();

{

departure = rs.getString("AirportName");
depDate = rs.getString("DepDate");
arrival = rs.getString("ArrAirportName");


BookingPrevTa.setText("Your flight details are:\nDeparting from "+departure+" arriving at: "+arrival+" departing on: "+depDate);



rs.close();

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

最佳答案

你的问题是你没有检查 next() 的返回值,当它返回 false 时,你会得到这样的异常。

这是代码的清理版本,它假设您将数据库连接作为名为 conn 的字段。根据需要调整日期格式。

改进是:

  • 添加了对 next() 返回值的检查(修复原始问题)
  • 使用 PreparedStatement 来防止 SQL Injection漏洞
  • 使用 try-with-resources 实现最佳资源管理,即确保资源(PreparedStatementResultSet)关闭且永远不会悬空
  • 将语句拆分为多行以提高可读性
  • 消除了 SQL 语句中不必要的括号的使用
  • 解开 JOIN 子句以方便使用
  • 声明了首次使用的所有局部变量。将 this. 添加到字段引用中,以提高清晰度并防止隐藏
String sql = "SELECT DepAirportTable.AirportName" +
", DepAirportTable.AirportDesignaton" +
", FlightTable.DepDate" +
", ArrAirportTable.ArrAirportName" +
", ArrAirportTable.ArrAirportDesignaton" +
" FROM FlightTable" +
" JOIN PlaneTable ON PlaneTable.FlightDesignationCode = FlightTable.FlightDesignationCode" +
" JOIN DepAirportTable ON DepAirportTable.AirportDesignaton = FlightTable.FromAirDes" +
" JOIN ArrAirportTable ON ArrAirportTable.ArrAirportDesignaton = FlightTable.ToAirDes" +
" WHERE DepAirportTable.AirportName = ?" +
" AND FlightTable.DepDate = ?" +
" AND ArrAirportTable.ArrAirportName = ?";
try (PreparedStatement stmt = this.conn.prepareStatement(sql)) {
String dateStr = ((JTextField)DateDep.getDateEditor().getUiComponent()).getText();
java.util.Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
stmt.setString(1, DepCombo.getSelectedItem());
stmt.setDate (2, new java.sql.Date(date.getTime()));
stmt.setString(3, ArrComboBox.getSelectedItem());
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String departure = rs.getString("AirportName");
String depDate = rs.getString("DepDate");
String arrival = rs.getString("ArrAirportName");
BookingPrevTa.setText("Your flight details are:\n" +
"Departing from " + departure +
" arriving at: " + arrival +
" departing on: " + depDate);
}
}
}

关于java - 间歇性结果 UPDATE、DELETE、SET 或 GET 语句 : ; ResultSet is empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35675539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com