我正在创建一个可以添加,搜索,更新和删除数据的简单系统。我的工作几乎完成,除了更新部分。我尝试了对问题的任何可能的修复,这是我使用的变量。
以下是我使用的代码:
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)
我认为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();
答案 1 :(得分: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) + "'");
注意:
OP中的update语句中有一些空格。我没有动过它们,但请注意它们没有任何用处。