如何通过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();        
}

“`这里写图片描述

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

向oracle写入大数据

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java....
  • java_cook
  • java_cook
  • 2008年04月16日 14:42
  • 364

如何用java jdbc 向数据库表插入大数据量

jvm:-Xmx1024m size = 1000000,可以插入成功。 如果再为size增大一个数量级,还是OutOfMemoryError,这时内存已经不好再增加分配了 批量处理本来是为了提高性...
  • daoshud1
  • daoshud1
  • 2017年08月28日 11:51
  • 368

JDBC实现图片存取数据库(1)

本文主要介绍: 1.如何通过JDBC把图片保存在数据库中(1) 2.如何通过JDBC把已经存在数据库的图片读取出来,再通过IO流写到指定位置(2) 注:图片如此,音频,视频亦是如此!1.如何通过...
  • geilidashen
  • geilidashen
  • 2015年08月26日 15:59
  • 748

JDBC处理大数据(大文本的存储和读取)

JDBC处理大数据(大文本的存储和读取) 1. 基本概念:大数据也称之为LOB(Large Objects),LOB又分为:clob和blob •   clob用于存储大文本。Text •   ...
  • Java958199586
  • Java958199586
  • 2011年11月17日 12:13
  • 2775

使用JDBC写入blob数据到数据库以及读取数据

package com.yucheng.jdbc; import java.io.FileInputStream; import java.io.FileOutputStream; impo...
  • tyutjavalily
  • tyutjavalily
  • 2015年07月30日 16:35
  • 513

JDBC通过文件读取加载方式连接数据库(以MySQL为例)

JDBC通过文件读取加载方式连接数据库(以MySQL为例)前言: 在java项目开发中,必然会经常使用到数据库连接,并且数据库的种类也不尽相同,另外JDBC(java DataBase Connect...
  • u013077446
  • u013077446
  • 2015年09月04日 20:49
  • 3353

大数据量的文件读写 java nio的完全发挥

小弟不才,自己整理了几种高效的读写大文件的方法,有兴趣的可以看看`package com.nio; import java.io.BufferedReader; import java.io.Bu...
  • xinda77
  • xinda77
  • 2016年12月21日 11:55
  • 1476

大数据量写入性能分析

[转自:http://15838341661-139-com.iteye.com/blog/1129824] java FileWrite 写文件 . 首先说一下这个大批量,是指有上千万...
  • mycup163
  • mycup163
  • 2012年07月02日 11:13
  • 1295

java 使用jdbc向mysql数据库中插入1亿条数据

package com.ddx.zhang; import java.sql.SQLException; import java.util.UUID; public class JDBCTest ...
  • zhangbest2009
  • zhangbest2009
  • 2016年03月09日 16:18
  • 2642

Java jdbc批量多线程读取CVS文件入库

需求是这样的:现在需要测试一个内存数据库的入库性能,要求测试每线程准备一个文件,10个线程入库总计100w记录数的单表入库性能。 知识点:jdbc + 多线程 + 批处理 + 读文件 先来看看我的...
  • u010323023
  • u010323023
  • 2016年09月01日 20:14
  • 2253
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何通过JDBC向数据库写入/读取大数据文件?
举报原因:
原因补充:

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