2017-12-26 11 views
-1

データを挿入するのではなく、データベースtable.ifにデータがあるかどうかを確認する必要があります。しかし、最初のボタンをクリックすると完全に動作します。私は同じ値でもう一度ボタンをクリックしようとすると、テーブルに挿入されます。あなたが二回next()を呼んでいる誰かに質問を選択して間違った結果が表示される

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

    try { 
     // TODO add your handling code here: 
     DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); 
     ArrayList<String> list = new ArrayList<>(); 
     Object obj[] = null; 
     Class.forName("com.mysql.jdbc.Driver"); 
     java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/cem?useSSL=false", "root", "123"); 
     //here stu is database name, root is username and password 
     Statement stmt = con.createStatement(); 

     String pn = "select gname from games where gname='" + jTextField1.getText() + "'"; 
     ResultSet rsPn = stmt.executeQuery(pn); 
     System.out.println(rsPn.next()); 
     if (rsPn.next() == false) { 

      String q = ("insert into games(gid,gname) values(NULL,'" + jTextField1.getText() + "')"); 
      int i = 0; 
      i = stmt.executeUpdate(q); 
      if (i > 0) { 
       System.out.println("success"); 
       list.add(jTextField1.getText()); 
       obj = list.toArray(); 
       model.addRow(obj); 

      } else { 
       System.out.println("stuck somewhere"); 

      } 

      StudentDetails.details(); 
      jTextField1.setForeground(Color.BLACK); 
      stmt.close(); 
      con.close(); 
     } else { 
      jTextField1.setForeground(Color.red); 
      System.out.println("Name Already exist"); 
     } 

    } catch (SQLException ex) { 
     Logger.getLogger(InsertPanel.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (ClassNotFoundException ex) { 
     Logger.getLogger(InsertPanel.class.getName()).log(Level.SEVERE, null, ex); 
    } 
}     
+0

なぜあなたは 'gname'に一意のキーを持っていませんか? – shmosel

+2

このコードは悪い考えです。あなたはこのようにUIとデータベースのコードを混ぜ合わせるべきではありません。それは不確定な混乱です。テストして置くことができるリポジトリクラスを書く方が良いでしょう。コントローラークラスへの参照を与えます。リポジトリクラスは、結果セットをコレクションにロードして呼び出しメソッドに戻す必要があります。あなたは明らかに間違っています。 – duffymo

答えて

4

を助けてください。(それは一回二つ以上の行が動作するはずですが)行がすでにあります場合でも

System.out.println(rsPn.next()); 
if (rsPn.next() == false) { 

2番目の呼び出しはfalseを返します。代わりに変数を使用してください:

boolean hasNext = rdPn.next(); 
System.out.println(hasNext); 
if (!hasNext) { 
関連する問題