java_JDBC(3)
Batch和Fetch两个特性非常重要。
Batch相当于JDBC的写缓冲,Fetch相当于读缓冲
如果把JDBC类比为JAVA IO的话,
不使用Fetch和Batch相当于直接使用FileInputStream和FileOutputStream
而设置了Fetch和Batch相当于使用BufferedInputStream和BufferedOutputStream
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class Test { private static int _1W = 10000; private static List<String> list = new ArrayList<String>(100 * _1W); static { for (int i = 0; i < 10 * _1W; i++) { list.add(String.valueOf(i)); } } public static void main(String[] args) throws ClassNotFoundException, SQLException { long start = System.currentTimeMillis(); fetchRead(); long end = System.currentTimeMillis(); System.out.println((end - start) + "ms"); } public static void batchWrite() throws SQLException, ClassNotFoundException { // 1108ms Class.forName("oracle.jdbc.OracleDriver"); Connection connection = DriverManager.getConnection("jdbc:oracle:thin:127.0.0.1:1521:orcl", "xxx", "xxx"); connection.setAutoCommit(false); PreparedStatement cmd = connection.prepareStatement("insert into t values(?)"); for (int i = 0; i < list.size(); i++) { cmd.setString(1, list.get(i)); cmd.addBatch(); if (i % _1W == 0) { cmd.executeBatch(); } } cmd.executeBatch(); connection.commit(); } public static void jdbcWrite() throws ClassNotFoundException, SQLException { // 28189ms Class.forName("oracle.jdbc.OracleDriver"); Connection connection = DriverManager.getConnection("jdbc:oracle:thin:127.0.0.1:1521:orcl", "xxx", "xxx"); connection.setAutoCommit(false); PreparedStatement cmd = connection.prepareStatement("insert into t values(?)"); for (String s : list) { cmd.setString(1, s); cmd.execute(); } connection.commit(); } public static void jdbcRead() throws ClassNotFoundException, SQLException { // 3120ms Class.forName("oracle.jdbc.OracleDriver"); Connection connection = DriverManager.getConnection("jdbc:oracle:thin:127.0.0.1:1521:orcl", "xxx", "xxx"); connection.setAutoCommit(false); PreparedStatement cmd = connection.prepareStatement("select * from t"); ResultSet rs = cmd.executeQuery(); int i = 0; while (rs.next()) { rs.getString(1); i = i + 1; } System.out.println("count:" + i); } public static void fetchRead() throws ClassNotFoundException, SQLException { //764ms Class.forName("oracle.jdbc.OracleDriver"); Connection connection = DriverManager.getConnection("jdbc:oracle:thin:127.0.0.1:1521:orcl", "xxx", "xxx"); connection.setAutoCommit(false); PreparedStatement cmd = connection.prepareStatement("select * from t"); cmd.setFetchSize(_1W); ResultSet rs = cmd.executeQuery(); int i = 0; while (rs.next()) { rs.getString(1); i = i + 1; } System.out.println("count:" + i); } }
java_JDBC(3)的更多相关文章
- JAVA_JDBC
测试类: 1 import java.util.ArrayList; import java.util.List; /** * 创建数据库: * 1.加载驱动 * Class.forName(&quo ...
- java_JDBC(4)
一.Statement import java.sql.*; public class TestJDBC { public static void main(String[] args) { Conn ...
- java_JDBC字段对应
地址: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm ...
- java_JDBC(2)
1.Statement 每次执行sql语句,数据库都要执行sql语句的编译 ,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement. 2.PreparedStatemen ...
- java_JDBC(1)
Java连接Oracle步骤: 1.注册加载驱动 驱动名:DRIVER="oracle.jdbc.driver.OracleDriver";Class.forName(" ...
- Java_JDBC一般写法
JDBC是Java DataBase Connectivity,Java程序访问数据库的标准接口. 如果是maven工程先加入依赖的jar包: <dependency> <group ...
- Java_JDBC连接数据库_使用读取配置文件的方式
package com.homewoek3_4.dao; import java.io.IOException; import java.io.InputStream; import java.sql ...
- Java_JDBC连接数据库
package com.accp.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pre ...
- Java_JDBC 连接
今天,接着上一篇( mysql 数据库 )的基础上,我就写一下 Java 怎样连接数据库,并且操作数据库. 首先,我们先来准备一下数据库连接的驱动: mysql 的 jar 包下载地址:https:/ ...
随机推荐
- Sencha Extjs4.2 皮肤制作
1 UI组件基础 学习ExtJs就是学习组件的使用.ExtJs4对框架进行了重构,其中最重要的就是形成了一个结构及层次分明的组件体系,由这些组件形成了Ext的控件. E ...
- Appium的安装和使用
<!DOCTYPE html><html><head><title>Appium的安装和使用</title><meta http-eq ...
- app间互相启动及传参数
http://blog.sina.com.cn/s/blog_13bc6705b0102wmc5.html http://blog.csdn.net/iefreer/article/details/8 ...
- select取值问题
全栈攻城狮们给挖了各种坑..其中一个典型是select控件取值.直接上代码: <!DOCTYPE html> <html lang="en"> <he ...
- 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类
内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...
- MVC+Repository+UOW+EntityFrmeWork的使用
1.首先创建一个空的MVC3应用程序,命名为MyRepository.Web,解决方案命名为MyRepository. 2.添加一个类库项目,命名为MyRepository.DAL,添加一个文件夹命名 ...
- Web开发者应当开始学习HTML5的新功能
据国外媒体报道,谷歌开发者业务部门高管马克·皮尔格雷姆(Mark Pilgrim)在WWW2010会议上表示,尽管还需要进一步完善,HTML5已经获得大多数平台支持,适合完成大多数任务. 但并非所有人 ...
- vim设置注意记录
set vb t_vb= setlocal buftype = "解决不能保存buff错误
- curl远程传输工具
/** * curl远程传输工具 */ public function post_curl($url,$body,$header,$type='POST'){ $ch = curl_init(); c ...
- CNTV视频回看下载地址
这其实不是新方法了,这个方法早在五六年前大家就在用,至今也没失效.但是五六年前那时候这个方法可以下载到过去三个月内CNTV直播过的视频,而现在只能下到一个星期的.之所以要下载回看版本,是因为比栏目版本 ...