preparestatement与statement

2020-03-17  本文已影响0人  Chelsea丶

写法介绍

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注入导致的漏洞问题

上一篇 下一篇

猜你喜欢

热点阅读