-2

重複の可能性:
JDBC で挿入 ID を取得するには?

最後の挿入 ID を取得しようとしていましたが、どうやら機能していないようです。一連のエラーが表示され続けます。そのうちの 1 つがこれです。

java.sql.SQLException: Can not issue SELECT via executeUpdate().

最後に挿入したものを取得しようとしましたが、機能しません。これが私のコードです

public int getLastInsertID(){
        try{
        Statement statement =  conn.createStatement();
        ResultSet rs = null;
        statement.executeUpdate("SELECT LAST_INSERTED_ID", Statement.RETURN_GENERATED_KEYS);
        rs = statement.getGeneratedKeys();
        while(rs.next()){
            System.out.println(""+rs.getInt(1));
            id =    rs.getInt(1);
            JOptionPane.showMessageDialog(null,id);

        }

        }catch(Exception e){
            e.printStackTrace();
        }

        return id;
    }
}

そして2つ目は

public void addEmployee(Personal p ,Contact c,Employee e) {
        Statement statement = null;

        String insert0 = "INSERT INTO `finalpayroll`.`users` (`emp_id`, `emp_pass`) VALUES ('2010-010122', '1231922')";
        try{
            statement = conn.createStatement();
            statement.executeUpdate(insert0);
            statement.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        id = getLastInsertID();

        String insert1 = "INSERT INTO personal_info (`idpersonal_info`,`First_Name`, `Middle_Initial`, `Last_Name`, `Date_Of_Birth`, `Marital_Status`, `Beneficiaries`) VALUES ("+id+",'"+p.getFirstName()+"', '"+p.getMiddleInitial()+"'" +
                "       , '"+p.getLastName()+"', '"+p.getDateOfBirth()+"', '"+p.getMaritalStatus()+"', '"+p.getBeneficiaries()+"')";
        try{
            statement = conn.createStatement();

        statement.executeUpdate(insert1);
        statement.close();
        conn.close();
        JOptionPane.showMessageDialog(null, "Employee Added!!");
        }catch(Exception ex){
            ex.printStackTrace();
        }


    }

最後に挿入されたIDを取得するにはどうすればよいですか? 私の方法で何が問題になっていますか?

4

1 に答える 1

0

特定のバージョンの mysql ドライバーのバグである可能性があるようです。このソース コードでエラー メッセージを検索します。getGeneratedIds 条件をチェックしていません。

MySQL には、 2005 年以来、同様の「修正されない」バグがあります。議論では、ドライバーが機能をサポートすることは JDBC API の要件ではないことが言及されています。これは既知の未解決の問題である可能性が高いようです。

于 2011-12-10T02:09:18.500 に答える