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)的更多相关文章

  1. JAVA_JDBC

    测试类: 1 import java.util.ArrayList; import java.util.List; /** * 创建数据库: * 1.加载驱动 * Class.forName(&quo ...

  2. java_JDBC(4)

    一.Statement import java.sql.*; public class TestJDBC { public static void main(String[] args) { Conn ...

  3. java_JDBC字段对应

    地址: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm ...

  4. java_JDBC(2)

    1.Statement 每次执行sql语句,数据库都要执行sql语句的编译 ,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement. 2.PreparedStatemen ...

  5. java_JDBC(1)

    Java连接Oracle步骤: 1.注册加载驱动 驱动名:DRIVER="oracle.jdbc.driver.OracleDriver";Class.forName(" ...

  6. Java_JDBC一般写法

    JDBC是Java DataBase Connectivity,Java程序访问数据库的标准接口. 如果是maven工程先加入依赖的jar包: <dependency> <group ...

  7. Java_JDBC连接数据库_使用读取配置文件的方式

    package com.homewoek3_4.dao; import java.io.IOException; import java.io.InputStream; import java.sql ...

  8. Java_JDBC连接数据库

    package com.accp.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pre ...

  9. Java_JDBC 连接

    今天,接着上一篇( mysql 数据库 )的基础上,我就写一下 Java 怎样连接数据库,并且操作数据库. 首先,我们先来准备一下数据库连接的驱动: mysql 的 jar 包下载地址:https:/ ...

随机推荐

  1. openstack controller ha测试环境搭建记录(十一)——配置neutron(网络节点)

    在网络节点配置内核参数:vi /etc/sysctl.confnet.ipv4.ip_forward=1net.ipv4.conf.all.rp_filter=0net.ipv4.conf.defau ...

  2. Linux系统开机启动流程

    (来源学习Linux时,自己做的笔记) Linux系统有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限, ...

  3. VS2010与SVN

    http://blog.sina.com.cn/s/blog_4fe44775010182yl.html 在VS2010中使用SVN,必须先安装SVN的客户端,再安装VisualSVN(SVN的插件) ...

  4. LWIP_STM32_ENC28J60_NETCONN_UDP(3)

    前面移植了lwip之后只是简单地做了一个dhcp的程序,但是实际工作中经常要用来通讯,那今天就来讲一讲怎么用lwip来进行UDP通讯 要使用数据通信首先第一步得知道lwip是怎么样保存数据的,在使用n ...

  5. HTML学习二(基础)

    HTML标题标题(Heading)是通过<h1>-<h6>等标签进行定义的<h1>定义最大标题<h6>定义最小标题注释:浏览器会自动地在标题的前后添加空 ...

  6. POJ3268Dijkstra

    题意:给定n个点,m条边,求所有顶点中到顶点x的来回最短距离 分析:考虑到数据范围,选用Dijkstra,用Floyd会超时 #include <iostream> #include &l ...

  7. SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解

    SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解 博客分类: 跟开涛学SpringMVC   6.6.2.@RequestParam绑定单个请求参数值 @RequestParam用于 ...

  8. VB.NET中的常用方法

    一.如何使用dll库: dll库是动态链接库,一般是别人提供的,用来做二次开发,相当于别人把一些函数包装在dll中,已经生成可以链接文件,你只能调用,但是不能看到方法的实现.所以给你提供dll的人一般 ...

  9. javascript--study

    1.函数传参:按值传递 对于数字.字符串等是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量. 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组 ...

  10. WCF应用场景

    WCF全称Windows Communication Foundation,是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分.使用 ...