我正在为大学做一项任务。在netbeans中使用查询访问ms访问中的数据库,这让我花了两天的时间头脑灵活地抓到目前为止。问题是,只要我打开包装并运行它,它会给我一个可爱的结果。出现此错误后:间歇结果UPDATE,DELETE,SET或GET语句:; ResultSet为空
net.ucanaccess.jdbc.UcanaccessSQLException:无效的游标状态:标识符游标未在UPDATE,DELETE,SET或GET语句中定位在行上: ResultSet是空的。
我希望你能给予任何帮助。 非常感谢。
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();
}
}
三种意见:1)为什么你必须在SQL语句中这么多括号?据我所知,你根本不需要任何东西。 2)将SQL分解成更多行,使其更易于阅读。 3)不要使用字符串连接来用用户提供的文本构建SQL语句。它会让你打开[SQL Injection](https://en.wikipedia.org/wiki/SQL_injection)攻击,允许黑客窃取你的数据和/或删除你的表。使用'PreparedStatement'和参数标记('?')。 – Andreas
感谢您的帮助。至于所有来自访问的括号。我学到的SQL是针对Oracle的,Access似乎并不喜欢这样。我处于时间压力之下,所以我通过在访问设计视图中创建查询来生成sql,切换到sql视图并复制并粘贴到netbeans中。 – Javaiskillingme