标签:
从一个简单的示例入手:
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