PreparedStatement的用法以及与Statement的区别,很重要的知识点!!!

PreparedStatement是Statement的子接口,相比Statement,PreparedStatement具备更高的效率以安全性,使用Statement时,其原理为先创建对象,然后将sql语句发送到数据库执行,这个过程中可将用户输入的数据拼接到sql语句中,存在sql注入风险;因此使用PreparedStatement替代Statement成为了一个选择,PreparedStatement具备预编译功能,其首先对sql语句进行预编译,然后再将值填充到对应占位符处,从而有效避免了sql注入的风险。

PreparedStatement用法如下:

String sql = "select * from tbuser where username=? and password=?";
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = DriverManager.getConnection(
                    "jdbc:mysql://127.0.0.1:3306/test", 
                    "root",
                    "root");
//            stmt = conn.createStatement();
//            ResultSet rs = stmt.executeQuery(sql);
            //获取sql语句的预编译命令(安全性方面保障,防止sql注入)
            ps = conn.prepareStatement(sql);
            //预处理,为占位符填充具体值
            ps.setString(1, name);
            ps.setString(2, pwd);
            ResultSet rs = ps.executeQuery();
            if(rs.next()){
                System.out.println("登录成功!");
            }else{
                System.out.println("登录失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            try {
                if(ps != null){
                    ps.close();
                }
                if(conn != null){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

猜你喜欢

转载自blog.csdn.net/sinat_42698442/article/details/81606320