javamysql更新语句

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

我正在尝试使用JavaSwing更新mysql记录。似乎MySql Update语句存在一些问题。我已将代码粘贴如下:

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行。