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