我用的是jdk 6.0 ,mysql5.0, ideas8.0, tomcat 6.0
public int updateUser(User user) {
        int result = 0;
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            con = commons.creatCon();
            ps = con.prepareStatement(SQL_UPDATE_USER);  //这里跟新数据库记录
            ps.setString(1, user.getPassword());
            ps.setString(2, user.getEmail());
            ps.setString(3, user.getFirstname());
            ps.setString(4, user.getLastname());
            ps.setString(5, user.getUsername());
            result = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            commons.closeCon(con, ps, rs);
        }
        return result;
    }
不明白,为什么我在创建ps的时候,数据库里面就有跟新了,明明参数还没有设置
这个在功能上倒不是问题,问题是如果我把这个sql语句作为批量更新的语句,而且有外键关联的话,就出问题了。这个时候就会报错。 

解决方案 »

  1.   

    PrepareStatement经过DBMS预编译,所以如果多次执行一个SQL语句的话,它只需要第一次调用的时候编译,后面再调用就不用了再编译了,你要是不想这样,就直接用Statement好了
      

  2.   

    prepareStatement是预处理。真正的执行还是ps.executeUpdate();
    但是我想说你的肯定是有问题的。
     ps.executeUpdate()是更新操作,结果是反影响的行数,应该是一个整数,而不是一个结果集。
      

  3.   

    也就是说
    int row=ps.executeUpdate();
    而不是
    result = ps.executeUpdate(); 
      

  4.   


    result 是一个int类型 不是 rs 。
    请问为什么在创建ps的时候会跟新数据库呢?
      

  5.   

    以上都差不多..
    但是注意..
    其实MYsql的JDBC是在数据库层是不支持预编译的..
    也就是mysql的prepareStatement和statement是一样的..
    只是prepareStatement可以防止一部分sql注入
      

  6.   


    又跑了好几次,没看错~~  ~~~~(>_<)~~~~ 呜呜 这事什么呀样的一种错误啊~~~~~~~~~~
      

  7.   

    哎 ps = con.prepareStatement(SQL_UPDATE_USER);  //这里跟新数据库记录 
     
     加了一个   ps.clearParameters();
    将就用吧,还是不知所以然郁闷 
      

  8.   

    你如果不执行ps.executeUpdate(); 是不会有数据更新的,你肯定哪位置弄错了,不会说你ps = con.prepareStatement(SQL_UPDATE_USER);  数据库就更新了