JDBC的批处理:
1)批处理:一次性处理很多数据。
解释:有时候需要向数据库发送一批sql语句执行,这时应避免向数据库一条条的发送执行,
而应采用JDBC的批处理机制,以提升执行效率。
2)两种方式:
Statement : //Statement stat=conn.createStatement();创建语句
stat.addBatch(sql):将sql填入缓冲区,进行编译。
stat.executeBatch():将缓冲区中的数据一次性执行。
PreparedStatement: //PreparedStatement ps=conn.prepareStatement(sql);
ps.addBatch():将参数放入占位符?存入缓存区。
ps.executeBatch()::将缓存区中的数据一次性执行。
3)案例:
向表bank_money插入1070条数据。
1) @Test public void testStatement() { Connection conn=null; try { conn= DBUtil2.getconn(); Statement stat=conn.createStatement(); long l1=System.currentTimeMillis(); for(int i=10;i<1080;i++) { String sql="insert into login_info values("+i+",'zs','111111')"; stat.addBatch(sql); //将sql填入缓冲区,进行编译。 stat.executeQuery(sql); } stat.executeBatch();//:将缓冲区中的数据一次性执行。 long l2=System.currentTimeMillis(); System.out.println(l2-l1); } catch (Exception e) { e.printStackTrace(); } } 2) @Test public void testPreparedStatement() { Connection conn=null; try { conn=DBUtil2.getconn(); String sql="insert into login_info values(?,?,?)"; PreparedStatement ps=conn.prepareStatement(sql); long l1=System.currentTimeMillis(); for(int i=10;i<1080;i++) { ps.setInt(1, i); ps.setString(2, "zs"); ps.setString(3, "111111"); ps.addBatch();// 将参数放入占位符?存入缓存区 if(i%100==0) { ps.executeBatch();//每100次将 将缓存区中的数据一次性执行。, } } ps.executeBatch();//将缓冲区数据一次性执行 long l2=System.currentTimeMillis(); System.out.println(l2-l1); } catch (Exception e) { e.printStackTrace(); }finally { DBUtil2.colseconn(conn); } } 3) public class DBUtil2 { private static String driver; private static String url; private static String user; private static String pwd; /**读取配置文件,只需要加载一次*/ static { try {//从db文件读取出来内容 /*文件字符流:默认当前文件路径在工程名下。 * "db.properties" * :通过当前类的类加载器所获取的流读取配置文件 */ FileReader fr=new FileReader("db.properties"); Properties prop=new Properties(); prop.load(fr); driver=prop.getProperty("driver"); url=prop.getProperty("url"); user=prop.getProperty("user"); pwd=prop.getProperty("pwd"); Class.forName(driver);//1加载驱动 } catch (Exception e) { e.printStackTrace(); /* "db.properties: driver=oracle.jdbc.driver.OracleDriver #driver=oracle.jdbc.OracleDriver url=jdbc:oracle:thin:@localhost:1521:orcl user=scott pwd=1234 * */ } } public static Connection getconn() {//2.建立连接 Connection conn=null; try { conn = DriverManager.getConnection( url, user, pwd); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void colseconn(Connection conn) { try { if(conn!=null) { conn.close(); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { System.out.println(getconn());//返回连接对象 } }