PrepareStament

发表时间:2017-05-11 16:52:02 浏览量( 14 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、PreparedStatement接口简介

PreparedStatement是预编译的SQL语句,它继承了Statement 接口,使用PreparedStatement的优点是:

(1)书写代码比较规范,不需要字符串的连接,毕竟字符串连接长了之后,看起来就很乱了。

(2)用于提高运行时效率,执行 PreparedStatement对象比执行Statement对象快,尤其是在当需要多次调用同一条SQL语句时,Preparedstatement的预编译结果会被缓存,下次执行相同的sql语句是,数据库端不会再进行编译了。而直接用数据库的缓冲区,提高数据访问率。

(3)提高安全性,可以防止SQL注入,这是在互联网中常用的攻击手段。如原来的用户删除方法,如果我传如以下这样的代码,那么将会删除全部的数据,可见别人想要攻击你的数据库其实是非常简单的:

UserDao userDao = new UserDao();
// sql 注入
userDao.delUser("6 or 1=1");

所以一般情况下,我们建议你使用PreparedStatement,而不是使用Statement执行数据库的操作。

二、示例

修改原来的添加用户的方法,注释了Statement的使用,改用PreparedStatement。

public void addUser(String userName,String userPass) {
    try {
        // 1、通过反射加载驱动。
        Class.forName(driver);
        // 2、通过驱动管理类建立一个连接 不同数据url写法是不同 ip端口 数据
        Connection connection = DriverManager.getConnection(url,dbusername, dbpass);
        // 3、通过Connect建立Statement
        //Statement statement = connection.createStatement();
        // 4、通过Statement执行sql语句
        //使用?代参
        String sql = "insert into tb_user(user_name,user_pass) values(?,?)";
        //Prepared Statement
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        //设置参数
        preparedStatement.setString(1, userName);
        preparedStatement.setString(2, userPass);
        // 受影响的行数
        int result = preparedStatement.executeUpdate();
        if (result > 0) {
            System.out.println("执行成功");
        } else {
            System.out.println("执行失败");
        }
        // 5、释放资源。
        preparedStatement.close();
        connection.close();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
}