美文网首页
preparestatement与statement

preparestatement与statement

作者: Chelsea丶 | 来源:发表于2020-03-17 23:54 被阅读0次

    写法介绍

    updateResult = statement.executeUpdate(sql);
                if(updateResult !=-1 ){//建表成功,开始操作
                    sql = "INSERT INTO Test VALUE ('1170210017','YZY','22')";
                    updateResult = statement.executeUpdate(sql);
                    sql = "INSERT INTO Test VALUE ('1170210018','YY','21')";
                    updateResult = statement.executeUpdate(sql);
                    sql = "INSERT INTO Test VALUE ('1170210019','HC','20')";
                    updateResult = statement.executeUpdate(sql);
                    sql = "SELECT * FROM Test";
                    resultSet = statement.executeQuery(sql);
                    // executeQuery会返回结果的集合,否则返回空值
    

    Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句

    sql = "INSERT INTO TEST VALUE(?,?,?)";
                 preparedStatement = connection.prepareStatement(sql);//预编译
                preparedStatement.setString(1,"1170210028");
                preparedStatement.setString(2,"HL");
                preparedStatement.setInt(3,45);
                updateResult = preparedStatement.executeUpdate();
    

    使用PrepareStatement对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编译的命令,并且可以重用。

    体现preparestatement优点的例子

    statement:

    for(int i =0 ;i < 5 ;i ++ ){
                    sql="insert into  TEST(Tno,Tage) values('"+"11702100"+i+"',"+i+");";
                 //编译+执行
                    updateResult=statement.executeUpdate(sql);
                }
    

    statement执行批量处理时,执行一次sql语句就编译一次,效率低。

    preparestatement

    sql="insert into TEST(Tno,Tage) values(?,?)";
                for(int i =0 ;i < 5 ;i ++ ){
                    //预编译
                    preparedStatement = connection.prepareStatement(sql);
                    preparedStatement.setString(1,"11702200"+i);
                    preparedStatement.setInt(2,i);
                    //这里才是执行
                    updateResult = preparedStatement.executeUpdate();
                    if(updateResult!=-1){
                        System.out.println("插入成功"+i);
                    }
                }
    

    每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译

    PrepareStatement的优点:

    1.效率更高
    随着数据的不断增大,PreparedStatement的效果是比Statement
    的效果要好,
    2.安全性好
    PreparedStatement会进行预处理编译,在数据的安全性上PreparedStatement是可以防止Statement的sql注入导致的漏洞问题

    相关文章

      网友评论

          本文标题:preparestatement与statement

          本文链接:https://www.haomeiwen.com/subject/javtyhtx.html