0

登録を処理するプログラムを作成しましたが、一度に複数の新しいユーザーを異なる ID で挿入しようとするたびに、次のエラー メッセージが表示されます。 'STCEPARTICIPANTS' で定義された 'SQL130217122630580' で識別される一意または主キー制約または一意のインデックスのキー値。

データを保存するように指示するボタンから渡されるアクションは次のとおりです。

private void printsavebtnActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // TODO add your handling code here:

    String query1= "insert into STCEPARTICIPANTS values("
                +speno1tf.getText()+",'"+sname1tf.getText()+"','"
                +fname1tf.getText()+"','"+uni1cb.getSelectedItem()
                +"')";
    String query2= "insert into STCEPARTICIPANTS values("
                +speno1tf.getText()+",'"+sname1tf.getText()+"','"
                +fname1tf.getText()+"','"+uni1cb.getSelectedItem()
                +"')";
    String query3= "insert into STCEPARTICIPANTS values("
                +speno1tf.getText()+",'"+sname1tf.getText()+"','"
                +fname1tf.getText()+"','"+uni1cb.getSelectedItem()
                +"')";
    String query4= "insert into STCEPARTICIPANTS values("
                +speno1tf.getText()+",'"+sname1tf.getText()+"','"
                +fname1tf.getText()+"','"+uni1cb.getSelectedItem()
                +"')";
    String [] queryarray= {query1,query2,query3,query4};

    int speno1,speno2,speno3,speno4;
    String task;
    if(fname1tf.getText().equals("")||sname1tf.getText().equals("")||speno1tf.getText().equals("")
            ||uni1cb.getSelectedItem().equals("-")|| fname2tf.getText().equals("")||sname2tf.getText().equals("")||speno2tf.getText().equals("")
            ||uni2cb.getSelectedItem().equals("-") || fname3tf.getText().equals("")||sname3tf.getText().equals("")||speno3tf.getText().equals("")
            ||uni3cb.getSelectedItem().equals("-") || fname4tf.getText().equals("")||sname4tf.getText().equals("")||speno4tf.getText().equals("")
            ||uni4cb.getSelectedItem().equals("-")  ){
        JOptionPane.showMessageDialog(rootPane, "Please enter the fields marked '*'");
    }
    else {
        try{
        speno1=Integer.parseInt(speno1tf.getText());
        speno2=Integer.parseInt(speno2tf.getText());
        speno3=Integer.parseInt(speno3tf.getText());
        speno4=Integer.parseInt(speno4tf.getText());

        int [] taskit = {speno1,speno2,speno3,speno4};

        for(int count2=0;count2<taskit.length;count2++){
            task=  "select * from STCEPARTICIPANTS where spe_number="+taskit[count2];
            DBOptions.executeNonQuery(queryarray[count2]);

             if(SearchData.searchSpeno(task)==true){
        JOptionPane.showMessageDialog(rootPane, "Sorry, this member is already in the database./t Please go to Profile to renew of view membership details. Thank you!");
        }   
        }

クラス SearchData を以下に示します。

public static boolean searchSpeno(String task){
    String query =task;
    ResultSet rs = DBOptions.executeSQLQuery(query);

    if(rs!=null)
        {
            try
            {
                java.sql.ResultSetMetaData rsmd = rs.getMetaData();
                int colCount = rsmd.getColumnCount();
                if(colCount > 0)
                {
                    try
                    {
                        if(rs.next() && ! rs.getString("spe_number").equals(""))
                        {
                                return true;
                        }
                        else
                        {
                            return false;
                        }

                    }

                    catch(SQLException e)
                    {
                        JOptionPane.showMessageDialog(null, e,"Search Error", 3);
                        return false;
                    }
                }
                else
                {
                     //JOptionPane.showMessageDialog(null, "Invalid Employee ID","Search Error", 3);
                     return false;
                }
            }
            catch(SQLException ex)
            {
                 //JOptionPane.showMessageDialog(null, ex.getMessage(),"Error Occured", 2);
                 return false;
            }

         }
        else
        {
            return false;
        }

}

}

}

クラス DBOptions は次のとおりです。

public static boolean executeNonQuery(String sqlString)
{
    try
    {
        Statement stmt = con.createStatement();
        stmt.executeUpdate(sqlString);
        JOptionPane.showMessageDialog(null,"success!");
        return true;
        //return the number of rows affected
    }
    catch(SQLException e)
    {
        //display error message
        JOptionPane.showMessageDialog(null,  e.getMessage()+"\nPlease Try Again","Non Query Execution Failure", 1);
        e.printStackTrace();
        return false;
    }
}

public static ResultSet executeSQLQuery(String sqlQuery)
{
    try
    {
        Statement stmt = con.createStatement();
        return stmt.executeQuery(sqlQuery); //query successfully executed
    }
    catch(SQLException e)
    {
        //display error message
        JOptionPane.showMessageDialog(null, e.getMessage()+"\nPlease Try Again","Query Execution Failure", 1);
        return null; //sql query execution failed
    }
}

}

お願いします、私はこのような問題をいくつか見てきました。さまざまな形式の解決策を試しましたが、うまくいきません。ミニプロジェクトの防御のためにこれを準備する必要があります。ご回答ありがとうございます。ありがとうございました。

4

1 に答える 1

0

テーブルはどのように作成しましたか?質問に CREATE TABLE ステートメントを貼り付けてもらえますか?

テーブルの各行には、PRIMARY KEY または UNIQUE として定義された各列の一意の値が必要であり、Derby はその制約を実施しています。

テーブル定義に戻り、どの列に PRIMARY KEY または UNIQUE を指定したかを確認し、次にプログラムを調べて、それらの列に指定した値を確認します。

次に、そのような列ごとに一意の値を提供するようにプログラムを変更します。

于 2013-02-19T16:13:28.787 に答える