2017-10-14 11 views
0

jtableとデータベースから選択した行を削除しようとしていますが、構文エラーが発生しています。私はvarcharを使用しているか、実際には構文が間違っているかもしれません。jtableから削除しようとしているJava SQL構文エラー

btnNewButton_2 = new JButton("Dzēst"); 
    btnNewButton_2.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      Statement statement = null; 
      try { 
       int tableRow = table_1.getSelectedRow(); 
       Object Kods = table_1.getValueAt(tableRow, 0); 
       Object Nosaukums = table_1.getValueAt(tableRow, 1); 
       Object Inventara = table_1.getValueAt(tableRow, 2); 
       Object Uzskaites = table_1.getValueAt(tableRow, 3); 
       Object Iegad = table_1.getValueAt(tableRow, 4); 
       Statement stmt = null; 
       Connection connection = ConnectDB(); 


       String sql = "DELETE FROM users " + 
         "WHERE Kods = " + Kods + " AND Nosaukums = '" + Nosaukums + "' AND Inventara Nr = " + 
         Inventara + " AND Uzskaites vertiba = '" + Uzskaites + "' AND Iegades vertiba = " + Iegad; 
       stmt = connection.createStatement(); 
       stmt.executeUpdate(sql); 

      } catch (SQLException ex) { 
       Logger.getLogger(dddddddd.class.getName()).log(Level.SEVERE, null, ex); 
        JOptionPane.showMessageDialog(null, "Nav ievadita visa informacija"); 
      } 

ERROR:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Nr = ttttt AND Uzskaites vertiba = '3.0' AND Iegades vertiba = 3.0' at line 1 

データベース変数:あなたの列がスペースで区切られた名前を持つ

Kods -Index -int(255)  
Nosaukums - varchar(255)   
Inventara Nr - varchar(255) 
Uzskaites vertiba - float     
Iegades vertiba - float 
+2

私はまた、 'PreparedStatement'sを見てみることをお勧めします。 – MadProgrammer

答えて

1

注意。通常、このような命名規則を使用するのはベストプラクティスではなく、snake_caseまたはCamelCaseです。

あなたの場合、列名を正しく引用する必要があります。

WHERE `Inventara Nr` = '33' 

あなたのコードはSQLインジェクションに対して脆弱ですが、注意してください。私はそれらについて読むことをお勧めします。常にPreparedStatementsを使用する必要があります。

+0

ありがとう、留意してください。 snake_caseですべてを変更しましたが、新しいエラーが発生しました。 'where句'の 'ttetetetetete'列が不明です。 – Krichukzz

+0

@Krichukzzすべての文字を引用符で囲む必要があります。例:DELETE FROM docs WHERE content = 'Hello World'。しかし、前述のように、PreparedStatementsは、あなたのパラメータにsetStringを使用するときにそれを行います。あなたの場合、 'Inventara Nr'は確かにvarcharだったので、 'Inventura Nr' = 'ttetetetete'のはずです。これは、PreparedStatementsを使用する際に役立ちます。http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html – petul

+0

'String sql =" DELETE FROM users "+ \t \t" WHERE Kods = "+ Kods + "And Nosaukums =" + Nosaukums + "AND Inventaro_Nr =" "+ \t \t Inventara +" AND Uzskaites_vertiba = "+ Uzskaites +" AND Iegades_vertiba = "+ Iegad; \t \t stmt = connection.createStatement(); \t \t stmt.executeUpdate(sql); 'まだ何も削除したくない。たとえ私が 'Nosaukums'と 'Inventara_Nr'をquoutesに入れても。 – Krichukzz

関連する問題