2016-09-02 1 views
0

から取得したデータを比較するとき、それは実行されないブロック文場合は、以下のswitchステートメントは、教師によって選択されたオプションを決定のMySQL DB

JButton NewUpdate = new JButton("UPDATE"); 
    NewUpdate.setFont(new Font("Lucida Grande", Font.BOLD, 14)); 
    NewUpdate.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      String regNo = RegNoCombo.getSelectedItem().toString(); 
      String subjectCode = SubjectCombo.getSelectedItem().toString(); //gets value selected from subject code JCombobox 
      double score = Double.parseDouble(scoreTextField.getText().toString()); 
      String testType = AssesmentCombo.getSelectedItem().toString();//gets value selected from assessment code JCombobox 
      String queryFromScoresTable = "SELECT CONCAT(student_id,subject_id) FROM scores;"; 

ボタンをクリックすることで、学生のデータベースを更新しようとしています。そしてDBから検索クエリを以下の文である「IF」変数名「compareData」

の文字列に変換され

  switch (testType) { 
      case "Class Work": 
       try { 
        conn3 = DriverManager.getConnection("jdbc:mysql://localhost:3306/resultchecker_db","%username%","%password%"); 
        ps3 = conn3.prepareStatement(queryFromScoresTable); 
        rs5 = ps3.executeQuery(); 
       } catch (SQLException e1) { 
        JOptionPane.showMessageDialog(null, e1); 
       } 
       try { 
        rs5.next(); 
        String compareData = rs5.getString(1); 

上方「queryFromScoresTable」を用いて、データベースから情報を取得学生「REGNO」と「テスト・タイプ」が存在する場合、それはブロックがテーブル

    if((regNo + subjectCode).equals(compareData)){ 
         String queryUpdateStudRecord = "UPDATE scores SET class_work=? WHERE student_id=? and subject_id = ?;"; 
         conn4 = DriverManager.getConnection("jdbc:mysql://localhost:3306/resultchecker_db","%username%","%password%"); 
         ps4 = conn4.prepareStatement(queryUpdateStudRecord); 
         ps4.setDouble(1, score); 
         ps4.setString(2, regNo); 
         ps4.setString(3, subjectCode); 
         ps4.execute(); 
         rs5.next(); 
エルス

このブロックは、学生レグノとスコアのために挿入することにより実行される情報を更新することで実行されない場合は、チェックすることになって選択されたtestTypeをDB。

    }else{ 
         String queryInsertRecord = "INSERT INTO scores(student_id, subject_id, class_work) VALUES (?,?,?)"; 
         conn4 = DriverManager.getConnection("jdbc:mysql://localhost:3306/resultchecker_db","%username%","%password%"); 
         ps4 = conn4.prepareStatement(queryInsertRecord); 
         ps4.setString(1, regNo); 
         ps4.setString(2, subjectCode); 
         ps4.setDouble(3, score); 
         ps4.execute(); 
         rs5.next(); 
        } 

問題は、しかし、唯一の「それ以外」文はすでにレグノが存在する場合、それは更新できないことを意味し、「もし」ステートメントを、評価せずに実行されるということです。既存の主キーエラーを返します。支援が必要な

は、

答えて

0

ifがトリガされません理由は考えUに感謝し、あなただけの単一のクエリで行くことができる:

INSERT ... 
ON DUPLICATE KEY UPDATE student_id=VALUES(student_id), subject_id=VALUES(subject_id) 

は、その後、あなたがいるかどうかを気にする必要はありませんあなたは更新や挿入を行うべきです - DBがあなたに自動的に決定させるようにしてください。

+0

ありがとうございました。これは本当にうまくいった。 – Edunge

0

equals()メソッドには注意してください。デバッグして、あなたが入っているもの(regNo + subjectCode)とcompareDataを見てください。