JDBC 防止SQL注入

sql语句参数化,防止sql注入

创建命令发送器(prepareStatement)

在选择命令发送器时,不再使用createStatement,而是使用prepareStatement

在建立连接后,先写好sql语句,使用?占位

        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.建立连接
        Connection connection = DriverManager.getConnection(url, user, password);
        //3.准备sql
        String sql ="insert into urls values(null,?,?,?)";
        //创建命令发送器
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

 填充数据

通过setXXX方法填充占位的数据,下标从一开始,第一个参数数字1代表第一个位置,第二个参数是要填充的内容,以此类推。 

        preparedStatement.setObject(1,"测试");
        preparedStatement.setObject(2,"测试1");
        preparedStatement.setObject(3,"测试2");

执行sql 获取结果 关闭资源

        int i = preparedStatement.executeUpdate();
        //打印结果
        System.out.println(i);
        //关闭资源
        preparedStatement.close();
        connection.close();

 与statement不同的是,prepareStatement在创建时要传入sql语句参数,在使用executeUpdate时不用再传参。

完整代码

    @Test
    public void test01() throws ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.建立连接
        Connection connection = DriverManager.getConnection(url, user, password);
        //3.准备sql
        String sql ="insert into urls values(null,?,?,?)";
        //创建命令发送器
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //填充数据
        //setObject(第几个?从1开始,sname);
        preparedStatement.setObject(1,"测试");
        preparedStatement.setObject(2,"测试1");
        preparedStatement.setObject(3,"测试2");
        //执行sql,获取结果
        int i = preparedStatement.executeUpdate();
        //打印结果
        System.out.println(i);
        //关闭资源
        preparedStatement.close();
        connection.close();

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超会写BUG的小凌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值