Java之PreparedStatement 的使用

  • Post author:
  • Post category:java


先看一段代码:

    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语句就需要执行该方法



版权声明:本文为qq_45577911原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。