关于preparestatement的详解

  /**
     * 将用户信息插入数据库
     * @param uv
     * @return
     */
    public int insertUser(UserVo uv){
        int userId = 0;
        initDb(); **初始化连接数据库的方法
        PreparedStatement pst=null;
        ResultSet rs=null;
        
        try {
            String sql="INSERT INTO usertable (user_name,user_password,user_sex,province_id,city_id,user_describe) VALUES (?,?,?,?,?,?)";
            pst=con.prepareStatement(sql);
            pst.setString(1, uv.getUserName());
            pst.setString(2, uv.getUserPassword());
            pst.setString(3, uv.getUserSex());
            pst.setInt(4, uv.getProvinceId());
            pst.setInt(5, uv.getCityId());
            pst.setString(6, uv.getUserDescribe());
            pst.executeUpdate();
            rs = pst.getGeneratedKeys();//获取自增长的列的新值        
            while(rs.next()){
                userId=rs.getInt(1);
            }
        } catch (SQLException e) {
            try {
                con.rollback();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{
            try {
                pst.close();
                con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return userId;
    }

 着重讲解一下preparestatement的部分,有点看不懂

[url]http://demojava.iteye.com/blog/720308[/url]
JDBC操作对象使用PreparedStatement代替Statement

Statement与PreparedStatement区别

1、PreparedStatement能防止SQL注入问题,而Statement是动态拼出SQL,因此不能解决;

2、PreparedStatement对SQL进行预编译,因此如果我们采用绑定变量的SQL(语句类似,数据不同)数据库只需解析一次(生成执行计划),因此效率要高;

3、Statement由于没有采用绑定变量,因此可能每次都需要编译(生成执行计划),因此对于那种语句类似但数据不同的SQL每次都需要编译,效率低;

4、PreparedStatement开销要比Statement高, 因此如果SQL只执行一次,应该使用Statement。

5、在大多数情况下都应该使用PreparedStatement。