码迷,mamicode.com
首页 > 其他好文 > 详细

绑定变量

时间:2016-06-26 23:47:54      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

从一个简单的示例入手:

package dbtest;
import java.sql.*;
public class Dbtest {
   public static final String drive = "oracle.jdbc.driver.OracleDriver";
   public static final String url = "jdbc:oracle:thin:@//192.168.196.200:1521/orcl2pdb";
   public static final String DBUSER="wxc";
   public static final String password="wxc";
   public static void main(String[] args) throws Exception{
       // TODO Auto-generated method stub      
           Connection conn = null;//表示数据库连接
           Statement stmt= null;//表示数据库的更新
           ResultSet result = null;//查询数据库    
           Class.forName(drive);//使用class类来加载程序
           conn =DriverManager.getConnection(url,DBUSER,password); //连接数据库
           //Statement接口要通过connection接口来进行实例化操作
           conn.setAutoCommit(false);
           stmt = conn.createStatement();
           //执行SQL语句来查询数据库
           stmt.execute("truncate table t9");
           long t1 = System.currentTimeMillis(); 
           for (int i = 0; i<=30000; i++ ){
           stmt.execute("insert into t9 values ("+i+")");
           }   
           conn.commit();    
           long t2 = System.currentTimeMillis(); 
           System.out.println("不使用邦定变量测试"+ (t2 - t1));
           stmt.execute("truncate table t9");
           long t3 = System.currentTimeMillis(); 
           PreparedStatement pstmt =conn.prepareStatement("insert into t9 values (?)"); 
           for (int i = 0 ; i<=30000; i++ ){
        	   pstmt.setInt(1, i);
           pstmt.executeUpdate(); } conn.commit(); long t4 = System.currentTimeMillis(); System.out.println("邦定变量测试"+ (t4 - t3)); conn.close();//关闭数据库 } }

不使用邦定变量测试36805
邦定变量测试17080

结果可以看出,使用绑定变量和不使用绑定 变量结果相差几倍;

如下截图中,使用绑定变量时,只生成一个游标,如第一行所示,不使用绑定变量时,每次执行都会生成一个游标,想想不使用绑定变量时每条语句都要经过一次硬解析,对共享池的压力是很大的。

技术分享

绑定变量

标签:

原文地址:http://www.cnblogs.com/wangxingc/p/5618777.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!