标签:pre PreparedStatement rs sql resultSet SQL conn 注入
1. Statement
- 在连接建立后,需要对数据库进行访问,执行命名或是SQL语句,可以通过
- Statement[存在SQL注入]
- PreparedStatement[预处理]
- 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();```
标签:pre,PreparedStatement,rs,sql,resultSet,SQL,conn,注入 来源: https://blog.csdn.net/qq_52722789/article/details/122447940
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。