我正在尝试使用java删除针对attendnt_N
的行但获取此异常java.sql.SQLSyntaxErrorException: ORA-00928: missing SELECT keyword
。如果有人知道它的删除/解决方案,请告诉我。这是我的代码:
ResultSet rss = stmt.executeQuery("select * from ATTENDANCE, ATTENDANTS");
System.out.println(attendnt_N); //working fine
int countd = 0;
while(rss.next()){
countd++;
if(attendnt_N.equalsIgnoreCase(rss.getString(1))){
String dell = ("(DELETE FROM ATTENDANCE, ATTENDANTS WHERE Attendant_Name ='" + attendnt_N + "')");
//String del = ("(DELETE FROM ATTENDANCE WHERE Attendant_Name ='" + attendnt_N + "')");
//String dell = ("(DELETE FROM ATTENDANTS WHERE Attendant_Name ='" + attendnt_N + "')");
//stmt.executeQuery(del);
stmt.executeQuery(dell);
JOptionPane.showMessageDialog(null, "Record against "+ attendnt_N +" is Deleted");
System.out.println("Deleted");
}
}
if(countd == 0){
JOptionPane.showMessageDialog(null, "Record against "+ attendnt_N +" does not exist");
System.out.println("Not Deleted");
faceFrame.repaint();
delBut.setEnabled(true);
}
答案 0 :(得分:3)
首先,你应该在发帖时抑制你的评论sql查询,这会使代码更难阅读。
蒂姆·比格雷森是对的。您应该只按表删除一个,但您还需要更改语句使用的方法。stmt.executeQuery(dell)
用于选择查询
要进行更新,请使用stmt.executeUpdate(dell)
查看文档:
ResultSet executeQuery(String sql)
执行给定的SQL语句,该语句返回单个ResultSet 对象
int executeUpdate(String sql)
执行给定的SQL语句,可以是INSERT,UPDATE或 DELETE语句或不返回任何内容的SQL语句,例如 SQL DDL语句。
答案 1 :(得分:0)
用户Tim Biegeleisen已经在答案中提供了执行记录删除的正确方法。虽然,这个问题没有说明你的表结构是什么,但是你会遇到一个潜在的性能故障:
米
您使用的SELECT
查询将生成CROSS JOIN。因此,下面的SELECT
语句应该更改为使用更严格的连接,例如INNER JOIN。
stmt.executeQuery("select * from ATTENDANCE, ATTENDANTS");
应替换为
之类的内容stmt.executeQuery("select * from ATTENDANCE, ATTENDANTS WHERE ATTENDENCE.ATTENDANT_NAME = ATTENDANTS.ATTENDANT_NAME AND ATTENDANTS.ATTENDANT_NAME = 'attendant1'").
但我认为这是不必要的。使用Tim的技术,您可以有效地删除所需的记录,而不会产生太多复杂性和性能影响。