Java之PreparedStatement 的使用

先看一段代码:

    try {
        Statement statement = conn.createStatement();
        statement.executeUpdate("insert into table1(column1,column2) values(101,'xxx')");
    } catch (SQLException e) {
        e.printStackT\frace();
    }

其中,是直接使用了Statement向表中插入数据,则会存在SQL注入的危险。再看下例:

    String id = "5";
    String sql = "delete from tablename where id=" +  id;
    Statement st = conn.createStatement();
    st.executeQuery(sql);//查询到表中将无数据
    //如果用户传入的id为“5 or 1=1”,那么将删除表中的所有记录

为了预防SQL注入,我们可以使用PreparedStatement
。在使用它时,SQL语句在程序运行之前就已经进行了预编译,当运行时把参数传给PreparedStatement,即使参数里有敏感字符,如
‘1=1’,数据库也会作为参数的一个字段属性值来处理,而不会作为一个SQL指令。

我们来结合代码来看一下它的 使用:

String sql="insert into student(id,name,sex,age) values(?,?,?,?),(?,?,?,?),(?,?,?,?)";//此处插入三条记录,在要插入的位置先使用占位符
            statement =conn.prepareStatement(sql);
            statement.setInt(1,1);  //占位符从1开始,此处表示了在第1个占位符处,插入的数据是整数1,也可以使用setObject
            statement.setString(2,"张三");//在第2个占位符处,插入的数据是一个字符串类型的“张三”
            statement.setString(3,"男"); //其它的以此类推
            statement.setInt(4,19);

            statement.setInt(5,2);
            statement.setString(6,"李四");
            statement.setString(7,"女");
            statement.setInt(8,18);
            
            statement.setInt(9,3);
            statement.setString(10,"王五");
            statement.setString(11,"男");
            statement.setInt(12,20);
            statement.executeUpdate();//每执行一个sql语句就需要执行该方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值