我试图使用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);
}
首先,您应该在发布时抑制注释的sql查询,这会使代码更难阅读。
Tim Biegeleisen是对的。您应该只执行一次按表删除操作,但还需要更改语句使用的方法。stmt.executeQuery(dell)
用于选择查询。
要更新,请使用stmt.executeUpdate(dell)
查看文档:
ResultSet executeQuery(String sql)
执行给定的SQL语句,返回单个ResultSet对象。
int executeUpdate(String sql)
执行给定的SQL语句,该语句可以是INSERT、UPDATE或DELETE语句或不返回任何值的SQL语句,例如SQL DDL语句
Oracle只支持一次从一个表中删除,我相信HQL也有这个限制。因此,您应该使用两个单独的DELETE
语句:
String del1 = ("DELETE FROM ATTENDANCE WHERE Attendant_Name ='" + attendnt_N + "'";
String del2 = ("DELETE FROM ATTENDANTS WHERE Attendant_Name ='" + attendnt_N + "'";
stmt.executeUpdate(dell);
stmt.executeUpdate(del2);
执行记录删除的正确方法已经在用户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的技术,您可以有效地删除所需的记录,而不会有太多的复杂性和性能影响。