Java中PreparedStatement执行SQL防止SQL注入实现

3 篇文章 0 订阅
2 篇文章 0 订阅

Java中PreparedStatement执行SQL防止注入实现

1、PreparedStatement是什么?

在我们平常使用JDBC的Statement来进行sql连接的时候遇到SQL注入时,就会直接登录成功,例如:
// 接收用户输入 用户名和密码
        String name = "hfkjsfhskj";
        String pwd = "'' or '1' ='1'";
当用户输入为以上并非我们数据库中正确的账号密码时,也会直接登录成功,这就是SQL注入,那么我们要怎么防止SQL注入呢?,这就要用到我们的PreparedStatement了

2、PreparedStatement的使用

2.1 首先我们和之前连接数据库一样先获取连接,接收用户输入的用户名和密码

//2、获取链接
        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语句中与之前有所区别当中的变量我们需要用?进行替代

//定义sql
        String sql = "select * from tb_user where username = ? and password = ?";

2.3 之后就是获取PreparedStatement对象以及给?赋值,并执行SQL语句

//获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        // 设置?的值
        pstmt.setString(1,name);
        pstmt.setString(2,pwd);
        // 执行sql
        ResultSet rs = pstmt.executeQuery();

2.4 最后我们来看最终的代码

    public void testLogin() throws  Exception{


        //2、获取链接
        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";


        //定义sql
        String sql = "select * from tb_user where username = ? and password = ?";

        //获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        // 设置?的值
        pstmt.setString(1,name);
        pstmt.setString(2,pwd);

        // 执行sql
        ResultSet rs = pstmt.executeQuery();



        // 判断登录是否成功
        if (rs.next()){
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }


        //7、释放资源
        rs.close();
        pstmt.close();
        conn.close();
    }

经过以上的步骤我们就可以实现利用PreparedStatement执行SQL来防止SQL注入啦。感谢大家看到这里,如果觉得我写得好的话麻烦大家给我一个👍,谢谢大家拉~(^ _ ^)∠※

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值