删除多个表中的记录时出现“java.sql.SQLSyntaxErrorException:ORA-00928:缺少SELECT关键字”

时间:2016-08-14 05:57:59

标签: java sql oracle10g

我正在尝试使用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);
    }

2 个答案:

答案 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的技术,您可以有效地删除所需的记录,而不会产生太多复杂性和性能影响。