Java中PreparedStatement执行SQL防止注入实现
1、PreparedStatement是什么?
在我们平常使用JDBC的Statement来进行sql连接的时候遇到SQL注入时,就会直接登录成功,例如:
String name = "hfkjsfhskj";
String pwd = "'' or '1' ='1'";
当用户输入为以上并非我们数据库中正确的账号密码时,也会直接登录成功,这就是SQL注入,那么我们要怎么防止SQL注入呢?,这就要用到我们的PreparedStatement了
2、PreparedStatement的使用
2.1 首先我们和之前连接数据库一样先获取连接,接收用户输入的用户名和密码
String url = "jdbc:mysql://127.0.0.1:3306/db1";
String username = "root";
String password = "****";
Connection conn = DriverManager.getConnection(url, username, password);
String name = "zhangsan";
String pwd = "123";
2.2 在定义SQL语句中与之前有所区别当中的变量我们需要用?进行替代
String sql = "select * from tb_user where username = ? and password = ?";
2.3 之后就是获取PreparedStatement对象以及给?赋值,并执行SQL语句
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.setString(2,pwd);
ResultSet rs = pstmt.executeQuery();
2.4 最后我们来看最终的代码
public void testLogin() throws Exception{
String url = "jdbc:mysql://127.0.0.1:3306/db1";
String username = "root";
String password = "****";
Connection conn = DriverManager.getConnection(url, username, password);
String name = "zhangsan";
String pwd = "123";
String sql = "select * from tb_user where username = ? and password = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.setString(2,pwd);
ResultSet rs = pstmt.executeQuery();
if (rs.next()){
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
rs.close();
pstmt.close();
conn.close();
}
经过以上的步骤我们就可以实现利用PreparedStatement执行SQL来防止SQL注入啦。感谢大家看到这里,如果觉得我写得好的话麻烦大家给我一个👍,谢谢大家拉~(^ _ ^)∠※