JDBC----Statement安全问题与PrepareStatement

1. Statement执行 ,其实是拼接sql语句的。  先拼接sql语句,然后在一起执行。 


        String sql = "select * from user where username='"+ username  +"' and password='"+ password +"'";

        UserDao dao = new UserDaoImpl();
        dao.login("admin", "100234khsdf88' or '1=1");
    
        SELECT * FROM t_user WHERE username='admin' AND PASSWORD='100234khsdf88' or '1=1' 
    
        前面先拼接sql语句, 如果变量里面带有了 数据库的关键字,那么一并认为是关键字。 不认为是普通的字符串。 
        rs = st.executeQuery(sql);

2.PrepareStatement:

> 该对象就是替换前面的statement对象。

1. 相比较以前的statement, 预先处理给定的sql语句,对其执行语法检查。 在sql语句里面使用 ? 占位符来替代后续要传递进来的变量。 后面进来的变量值,将会被看成是字符串,不会产生任何的关键字。


            String sql = "insert into user values(null , ? , ?)";
             ps = conn.prepareStatement(sql);
             
             //给占位符赋值 从左到右数过来,1 代表第一个问号, 永远你是1开始。
             ps.setString(1, userName);
             ps.setString(2, password);
 

猜你喜欢

转载自blog.csdn.net/mqingo/article/details/84558356