首页 > 代码库 > PreparedStatement

PreparedStatement

一、or ture or安全问题-------------利用PreparedStatement接口解决
        解决办法:使用Statement的子接口PreparedStatement来解决。
        即:
            PreperedStatement的参数使用占位符替代,
            能通过setXxxx()方法为占位符赋值,
            在赋值的过程中动态检测,预防SQL注入问题的发生。
        code:
            String sql = "select * from user where name = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,name);
            pstmt.excuteQuery();
            
            
二、PerparedStatement解析
        PreperedStatement是Statement的孩子,它的实例对象可以通过调用Connection.preparedStatement()方法获得。
        获取--通过Connection类:
             创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
                 PreparedStatement prepareStatement(String sql) ;
      code:
          PreparedStatement pstmt = conn.preparedStatement(sql);   
            
        常用方法:
            1》设置占位符?的值
                void setDouble(int parameterIndex, double x)
                 void setFloat(int parameterIndex, float x)
                 void setInt(int parameterIndex, int x)
            void setString(int parameterIndex,String x);
            void setDate(int parameterIndex,Date x);
            
            paramterIndex:需要替换的占位符下标,从1开始
            x:需要替换成的值

            2》在此 PreparedStatement 对象中执行 SQL 查询
                 ResultSet executeQuery();
                 Blean execute();
                 int executeUpdate();
         
        
        优点:相对于Statement对象而言:
            1》PreperedStatement可以避免SQL注入的问题。
            2》Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
                 PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
            3》并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

                
        总结:PerparedStatement的特点
            1》解决SQL注入问题,在绑定参数时,动态检测
            2》使用?占位符替代真实的绑定值
            3》在发送相同结构的SQL时,较Statement效率有所提升
            故:
                项目中优先使用:PreparedStatement!!!



三、Statement和PreparedStatement的特点
    1》对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录
    2》对于创建和删除表或数据库,我们还可以使用execute(),该方法返回false,表示创建和删除数据库表成功
    总结:
        int executeUpdate()函数:根据表中被影响的行数作为返回值。
        boolean excute()函数:除了select操作外返回true之外,其它的操作都返回flase;
   

PreparedStatement