2014-10-12 3 views
0

Я создаю простую систему, которая может добавлять, искать, обновлять и удалять данные. Моя работа почти завершена, за исключением части обновления. Я пробовал любые возможные исправления проблемы, которая является переменной, которую я использовал.Не удается найти переменную

Вот код, который я использовал:

try{ 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection con= (Connection)  
    DriverManager.getConnection("jdbc:mysql://localhost:3306/tvatpms","root",""); 
    Statement stmte=con.createStatement(); 

    String acn = jTextField3.getText(); 
    String c_name = jTextField10.getText(); 
    String c_address=jTextField4.getText(); 
    String c_tin=jTextField5.getText(); 
    String c_bln=jTextField6.getText(); 
    String c_ea=jTextField7.getText(); 
    String c_tn=jTextField8.getText(); 
    String c_fn=jTextField9.getText(); 
    String c_cp=jTextField2.getText(); 



String sql=("UPDATE client SET c_name='" + (c_name) "', c_address='" + (c_address)+ "',  c_tin='" + (c_tin)+ "', c_bln='" + (c_bln)+ "', c_ea='" + (c_ea)+ "', c_tn='" + (c_tn)+ "', c_fn='" + (c_fn)+ "', c_cp='" + (c_cp)+"' where acn = '" + (acn) + "'"); 


stmte.executeUpdate(sql); 


    jTextField10.setText(""); 
    jTextField4.setText(""); 
    jTextField5.setText(""); 
    jTextField6.setText(""); 
    jTextField7.setText(""); 
    jTextField8.setText(""); 
    jTextField9.setText(""); 
    jTextField2.setText(""); 


JOptionPane.showMessageDialog(null,"DATABASE UPDATED"); 

} 
    catch(Exception e) { 
     JOptionPane.showMessageDialog(null,"Database not updated!","Error",JOptionPane.ERROR_MESSAGE); 
     // Logger.getLogger(log.class.getName()).log(Level.SEVERE, null, ex);  
    } 

Проблема является строка SQL часть. В нем говорится, что программа не может найти переменную c_name, которая была объявлена ​​выше. Кто-нибудь может мне помочь? Я все еще новичок в использовании Java, поэтому помощь будет очень оценена.

+0

Покажите нам точное сообщение об ошибке. Один в вашем названии, а другой в вашем теле вопроса различен. –

+2

У вас есть уязвимость в SQL-инъекции. – SLaks

+0

Вам не хватает знака '+' после '(c_name)'? – khelwood

ответ

0

Вы пропускаете + оператора после (c_name):

String sql=("UPDATE client SET c_name='" + (c_name) + // This + was missing 
       "', c_address='" + (c_address) + 
       "',  c_tin='" + (c_tin) + 
       "', c_bln='" + (c_bln) + 
       "', c_ea='" + (c_ea) + 
       "', c_tn='" + (c_tn) + 
       "', c_fn='" + (c_fn) + 
       "', c_cp='" + (c_cp) + 
       "' where acn = '" + (acn) + "'"); 

Примечание:
Там будут бросить немного непечатаемых в заявлении обновления в ОП. Я оставил их нетронутыми, но обратите внимание, что они не служат никакой полезной цели.

2

Я думаю PreparedStatement бы один идеальное решение, чтобы избежать такого рода проблем Попробуйте

String sql="UPDATE client SET c_name=?,c_address=?,c_tin=?,c_bln=?,c_ea=?,c_tn=?," + 
     " c_fn=?,c_cp=? where acn = ?"; 
PreparedStatement statement = conn.prepareStatement(sql); 
statement.setString(1, c_name); 
statement.setString(2,c_address); 
statement.setString(3,c_tin); 
statement.setString(4,c_bln); 
statement.setString(5,c_ea); 
statement.setString(6,c_tn); 
statement.setString(7,c_fn); 
statement.setString(8,c_cp); 
statement.setString(9,acn); 
statement.executeUpdate(); 
Смежные вопросы