javamysql更新语句
我正在尝试使用JavaSwing更新mysql记录。似乎MySql Update语句存在一些问题。我已将代码粘贴如下:javamysql更新语句,java,mysql,swing,Java,Mysql,Swing,我正在尝试使用JavaSwing更新mysql记录。似乎MySql Update语句存在一些问题。我已将代码粘贴如下: conDBase = getConnection(); stmt = conDBase.createStatement(); String sql = "update user set role = " + jComboBox1.getSelectedItem()+ "where userID =" + jComboBox2.getSelectedItem(); stm
conDBase = getConnection();
stmt = conDBase.createStatement();
String sql = "update user set role = " + jComboBox1.getSelectedItem()+ "where userID =" + jComboBox2.getSelectedItem();
stmt.executeUpdate(sql);
conDBase.close();
JOptionPane.showMessageDialog(null, "User Role Updated");
this.dispose();
new Admin().setVisible(true);
那么,您的代码至少有两个问题:
- 您没有使用预先准备好的语句,这意味着您已经为SQL注入敞开了大门。(您甚至没有引用正在使用的值,这可能会被视为第三个问题。)
- 在“where”子句之前没有空格
哦,您可能也不应该在UI线程上执行这些操作(或从非UI线程访问UI控件)…我不确定您会收到什么错误消息(也许您可以发布一些详细信息) 但是,以下行需要更改:
String sql = "update user set role = " + jComboBox1.getSelectedItem()+ " where userID =" + jComboBox2.getSelectedItem() + ";";
注意“where”前面的空格和语句末尾的分号
更好的版本如下所示:
public int updateRoleForUser (String role, Integer userId) throws Exception {
int i = 0;
String sql =
" update user "
+ " set role = ?"
+ " where userId = ?;";
try {
conDBase = getConnection();
ps = conDBase.prepareStatement(sql);
ps.setString(1, role);
ps.setInt(2, userId);
i = ps.executeUpdate();
} catch (Exception e) {
// do something with Exception here. Maybe just throw it up again
} finally {
closeConnection();
return i;
}
};
然后使用组合框中的值调用该方法
实际上,您应该将整个过程放入某个描述的DAO类中的方法中,然后将角色和用户ID值作为参数传递进来 您必须在引号和“where”之间留出一个空格。像这样:
...getSelectedItem() + " where...
因为,如果没有,您将得到如下结果:
...set role = 25where userId...
您面临的问题是什么?无法使用JavaSwing更新MySQL行。