如何通过JDBC向数据库写入/读取大数据文件?

原创 2017年07月31日 14:07:05

本篇文章知识点
1.向数据库写入文本大数据文件
2.读取数据库的文本大数据文件
3..向数据库写入二进制大数据文件
4.读取数据库的二进制大数据文件

为了演示,先在MySQL创建两个表用于读取/写入大数据文件

演示大数据对象所用数据库表的脚本:
CREATE TABLE note(
 id INT PRIMARY KEY,
 note TEXT   //能保存65535个字符
);

CREATE TABLE img(
 id INT PRIMARY KEY,
 img MediumBLOB  
 );
TinyBLOB最大支持255B, BLOB最大只支持65K, MediumBLOB最大只支持16M, LongBLOB最大支持4G

另外一个小的知识点

CLOB: Character Large Object 最大上限就是4G
1) 有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型
2) BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。

首先必须要理解,向数据库写入或者读取大数据文件,肯定不能和普通的char、int等基本数据一样。直接写入。因为内存不够。所以要通过流!!!
向数据库写入文本大数据文件:setAsciiStream

@Test//保存大文本数据对象到数据库
    public void demo1() throws Exception{
        Connection con = ConnUtils.getConnection();
        String sql = "insert into note values(?,?)";
        PreparedStatement pst = con.prepareStatement(sql);
        pst.setInt(1, 1);
        InputStream in = new FileInputStream( new File("src/Studying/d15/ConnUtils.java"));
        pst.setAsciiStream(2, in);
        pst.executeUpdate();
        con.close();
    }

在数据库可以看到刚刚写入的文本数据
这里写图片描述
从数据库中读取文本大数据文件:getAsciiStream

@Test//读取大文本数据对象到数据库
    public void demo3() throws Exception{
        Connection con = ConnUtils.getConnection();
        String sql = "select * from note where id = 1";
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(sql);
        rs.next();
        InputStream in = rs.getAsciiStream(2);
        BufferedReader br = new BufferedReader( new InputStreamReader(in));
        String str = null;
        while( (str=br.readLine())!=null){
            System.out.println(str);
        }
        con.close();
    }

这里写图片描述

向数据库写入二进制大数据文件
需要注意的是,数据库表设计的时候,对于二进制数据类型设计 有不同的大小的
TinyBLOB最大支持255B, BLOB最大只支持65K, MediumBLOB最大只支持16M, LongBLOB最大支持4G

    }
    @Test//保存二进制数据对象到数据库
    public void demo2() throws Exception{
        Connection con = ConnUtils.getConnection();
        String sql = "insert into img values(?,?)";
        PreparedStatement pst = con.prepareStatement(sql);
        pst.setInt(1, 1);
        InputStream in = new FileInputStream( new File("src/a.jpg"));
        pst.setBinaryStream(2, in);
        pst.executeUpdate();
        con.close();
    }

第一遍我存失败了
这里写图片描述
因为我的图片太大了。我修改了表的类型就成功了
这里写图片描述

4.读取数据库的二进制大数据文件
一开始我存的d:a/
这里写图片描述

“`
@Test//从数据库读取二进制文件
public void demo4() throws Exception{
Connection con = ConnUtils.getConnection();
String sql = “select * from img where id = 1”;
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
rs.next();
InputStream in = rs.getAsciiStream(2);

    OutputStream out = new FileOutputStream("D:/a/a.png");
    byte buf[] = new byte[512];
    int len=0;
    while( (len=in.read(buf))!=-1){
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
    con.close();        
}

“`这里写图片描述

版权声明:本文为博主原创文章,大家一起学习进步。

JAVA-22-JDBC批处理、获取自增长值、处理大数据文件、数据库事物

一、JDBC进行批处理1.1 为什么要用批处理?   之前:一次操作只能发送一条sql语句到数据库服务器,效率并不高!如果要插入2000条记录,那么必须发送2000条sql语句。(如果IO流的话,一...

JDBC操作大数据文件

在实际的开发过程中,我们可能需要把大文本或者二进制数据存储到数据库中,下面我们一起来学习一个如何使用JDBC向mysql中插入大文本数据。 在数据库中,大数据称为LOB(Large Objects)...

6月10日(JDBC进行批处理,处理大数据文件)

1 JDBC进行批处理 1.1 为什么要用批处理? 一次操作只能发送一条sql语句到数据库服务器,效率并不高! 如果要插入2000条记录,那么必须发送2000条sql语句。 现在:插入2000条记录...

C# 读取大数据文件至内存

  • 2016年07月25日 12:32
  • 11.26MB
  • 下载

JDBC(二)--批处理/JDBC获取自增长值/处理大数据文件/事务

JDBC进行批处理1.使用批处理的原因: 之前一次操作只能发送一条sql语句到数据库服务器,效率并不高。假如我们要发送2000条数据,那么必须发送2000条数据。 所以现在可以使用sql缓存区,一...

多线程读取大数据文件(续)

昨天的程序有点错误,重新粘一个, for循环终结括号括错了。 另外新加了个destroy()方法 package com.kong.trinet.util; import java.io.Buffe...
  • lrq1988
  • lrq1988
  • 2014年01月07日 10:58
  • 822

较大数据文件的读取优化过程续

由来在上一篇博客(见参考1)中写了从基本到优化的过程,但仍然有可以优化的余地,这里记录下。问题文章1中根据固定行字节数优化读取速度有很大的弊端,就是需要解析的文件可能是不规则行长度的。可以有通用的按行...

Java 高效读取大数据文件—最优方法

数据背景,一个文件大小>=10G,每一行都是一个json对象数据 如下: {"id":"C0D962","time":"2015-09-01 23:59:54","lon":"113.534","la...

多线程读取大数据文件

工作之故,要读取一个几十万条的文本,就写了这个程序,倒腾了俩天,并不一定是最终版,姑且先记录下来。 1、本地读取以后改为网络读取 2、timer是为了作定时刷新 3、容器启动时,首先加载MobileU...
  • lrq1988
  • lrq1988
  • 2014年01月06日 21:01
  • 1225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何通过JDBC向数据库写入/读取大数据文件?
举报原因:
原因补充:

(最多只允许输入30个字)