SQL注入及PreparedStatement

2022/1/12 19:05:26

本文主要是介绍SQL注入及PreparedStatement,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. Statement

  1. 在连接建立后,需要对数据库进行访问,执行命名或是SQL语句,可以通过
    1. Statement[存在SQL注入]
    2. PreparedStatement[预处理]
    3. CallableStatement[存储过程]

2.SQL注入
1=1永远成立

		Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM stu where sno ='1' or ' and sname = 'or '1'='1'");
        //如果有数据,rs.next()返回true
        while(rs.next()){
            System.out.println(rs.getString(1  )+" "+rs.getString(2));
        }

2.PreparedStatement–可解决sql注入

			Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
            //sql语句中的?相当于占位符 pre是PreparedStatement接口的实现类的对象
           String sql="select * from stu where sno =? and sname = ?";
            PreparedStatement pre=conn.prepareStatement(sql);
            //对问号依次赋值
            pre.setString(1,sno);//第一个问号,第一个问号的值
            pre.setString(2,name);
            //若执行dml(增删改)语句则执行 excuteUpdate()
            ResultSet resultSet = pre.executeQuery();
            while (resultSet.next()){
                System.out.println(resultSet.getString(2));
            }
            conn.close();
            pre.close();
            resultSet.close();```



这篇关于SQL注入及PreparedStatement的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程