预编译PreparedStatement 使用范围:当执行相似sql语句的次数比较多(例如用户登陆,对表频繁操作。。)语句一样,只是具体的值不一样,被称为动态SQL优点:语句只编译一次,减少编译次数。提高了安全性(阻止了SQL注入)缺点: 执行非相似SQL语句时,速度较慢。
原理:相似SQL只编译一次,减少编译次数名词解释:SQL注入:select * from user where username="张三" and password="123" or 1=1;前面这条语句红色部分就是利用sql注入,使得这条词句使终都会返回一条记录,从而降低了安全性。
事例执行过程: public void exec2(Connection conn){ try { Long beginTime = System。currentTimeMillis(); conn。
setAutoCommit(false);//手动提交 PreparedStatement pst = conn。prepareStatement("insert into t1(id) values (?)"); for(int i=0;i<10000;i++){ pst。
setInt(1, i); pst。execute(); } conn。commit(); Long endTime = System。
currentTimeMillis(); System。out。println("Pst用时:"+(endTime-beginTime)+"秒");//计算时间 pst。
close(); conn。close(); } catch (SQLException e) { e。printStackTrace(); } }执行时间:Pst用时:14秒 3。
使用PreparedStatement + 批处理使用范围:一次需要更新数据库表多条记录优点:减少和SQL引擎交互的次数,再次提高效率,相似语句只编译一次,减少编译次数。提高了安全性(阻止了SQL注入)缺点:原理:批处理: 减少和SQL引擎交互的次数,一次传递给SQL引擎多条SQL。
名词解释:PL/SQL引擎:在oracle中执行pl/sql代码的引擎,在执行中发现标准的sql会交给sql引擎进行处理。SQL引擎:执行标准sql的引擎。事例执行过程:public void exec3(Connection conn){ try { conn。
setAutoCommit(false); Long beginTime = System。currentTimeMillis(); PreparedStatement pst = conn。
prepareStatement("insert into t1(id) values (?)"); for(int i=1;i<=10000;i++){ pst。
setInt(1, i); pst。addBatch();//加入批处理。
全部