JDBC之 大数据内容的传输

JDBC之 大数据内容的传输

什么是大数据内容?

  在数据库中,有一条一条的记录,记录中很多字段都是几个字符就够的,假如现在要把一部小说存入数据库,这本小说当然不是几个字符组成,而是由几万字组成,这本小说的数据我们就可以说是大数据,生活中当然有各种各样的大数据:电影,音乐,图片等等。。。

大字符数据内容操作

  大字符内容:通常是指很长的字符类型的文件,例如小说,故事等等,内容有字符组成。

下面说明一下MySQL与Oracle中的大数据类型

数据种类 数据大小 MySQL Oracle
字符 char,varchar varchar2
  text/longtext clob
字节 bit,blob,longblob blob

1.把大字符数据存进数据库(把一个文本的数据存进MySQL中的text类型字段)

@Test
        public void writeInDB() throws Exception {
            //获取连接
            connection = sqlUtil.getconnection();

            //获取对象
            PreparedStatement preparedStatement =
                    connection.prepareStatement("insert into book values(?)");

            //准备一个Reader用于读取本地文件
            Reader reader = new FileReader(new File("e:/test.txt"));

            //设置大数据参数
            preparedStatement.setClob(1, reader);

            //执行SQL语句
            preparedStatement.executeUpdate();

            //关闭资源
            reader.close();
            sqlUtil.close(preparedStatement, connection);
        }

2.从数据库把大字符文件读入到本地

        @Test
        public void readFromDB() throws Exception
        {
            //获取连接
            connection = sqlUtil.getconnection();

            //创建对象
            PreparedStatement preparedStatement =
                    connection.prepareStatement("SELECT content FROM book");

            //设置参数
            //preparedStatement.setObject(1, "book");

            //获得结果
            ResultSet res = preparedStatement.executeQuery();

            //以String的形式获得大字符内容
            while(res.next())
            {
                String content = res.getString("content");
                System.out.println(content);
            }

            //关闭资源
            sqlUtil.close(preparedStatement, connection);
        }

获得结果后还有第二种方法:

@Test
        public void readFromDB() throws Exception
        {
            //获取连接
            connection = sqlUtil.getconnection();

            //创建对象
            PreparedStatement preparedStatement =
                    connection.prepareStatement("SELECT content FROM book");

            //设置参数
            //preparedStatement.setObject(1, "book");

            //获得结果
            ResultSet res = preparedStatement.executeQuery();

            FileWriter fileWriter = new FileWriter(new File("d:/11021.txt"));
            //利用Clob对象
            if(res.next())
            {
                Clob clob = res.getClob("content");
                Reader reader = clob.getCharacterStream();

                //然后把Reader写入到本地文件中
                char[] cr = new char[1024];
                int len = 0;
                while((len = reader.read(cr))!=-1)
                {
                    fileWriter.write(cr, 0, len);
                }
                reader.close();
            }

            //关闭资源
            fileWriter.close();
            sqlUtil.close(preparedStatement, connection);
        }

以上就是对大字符文件的读入与写出~下面我们示范来对大字节文件的操作~

4.把大字节文件写入数据库

    @Test
    public void writeInDB() throws Exception {
        //获取连接
        connection = sqlUtil.getconnection();

        //获取对象
        PreparedStatement preparedStatement =
                connection.prepareStatement("insert into book values(?,?)");

        //准备一个InputStream用于读取本地文件
        InputStream in = new FileInputStream(new File("f:/computer.jpg"));

        //设置大数据参数
        preparedStatement.setObject(1, 1);
        preparedStatement.setBlob(2, in);
        //也可以使用这个
        //preparedStatement.setBinaryStream(2, in);

        //执行SQL语句
        preparedStatement.executeUpdate();

        //关闭资源
        in.close();
        sqlUtil.close(preparedStatement, connection);
    }

5.从数据库把大字节文件读取到本地

    @Test
    public void readFromDB() throws Exception
    {
        //获取连接
        connection = sqlUtil.getconnection();

        //创建对象
        PreparedStatement preparedStatement =
                connection.prepareStatement("SELECT content FROM book where id=?");

        //设置参数
        preparedStatement.setInt(1, 1);

        //获得结果
        ResultSet res = preparedStatement.executeQuery();

        FileOutputStream out = new FileOutputStream(new File("d:/999.jpg"));
        //利用Blob对象
        if(res.next())
        {
            //Blob blob = res.getBlob("content");
            //InputStream in =  blob.getBinaryStream();//这样也行

            InputStream in = res.getBinaryStream("content");
            //然后把Reader写入到本地文件中
            byte[] buf = new byte[1024];
            int len = 0;
            while((len = in.read(buf))!=-1)
            {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
        }
        //关闭资源
        sqlUtil.close(preparedStatement, connection);
    }
时间: 2024-12-19 18:10:02

JDBC之 大数据内容的传输的相关文章

使用tar+pigz+ssh实现大数据的高效传输

以前我们跨主机拷贝大数据的时候,比如要拷贝超过100GB的mysql原始数据,我们通常的做法如下: 在源端打包压缩为tar.gz文件 采用scp或者rsync等方式拷贝到目标主机 在目标主机解压文件 这三个过程是同步阻塞,即不能同时异步执行,导致效率低下. 现在我们将过程优化为以数据流的方式,同时执行(非阻塞模式),则效率一般可以提高到原来的3倍以上,具体实现如下: 磁盘读取---->打包---->压缩------>传输---->解压缩-->拆包---->落盘 |-&g

大数据波分传输工程方案设计主要细节

大数据时代已经有好几年了,波分传输被越来越多的人使用,甚至一些骨干网传输都已经离不开波分传输了.用的人多,规范也就很多,因此一些工程上的设计也困扰着越来越多的人,今天我就和大家分享一下,波分传输在做方案的初期需要了解到哪些的工程信息,技术大神看看就好,仅供初学者参考. 1.整个波分系统中传输的数据类型是什么? 这是因为CATV业务和PON业务不能在波分中传输.所以前期首先要了解这个,不然白忙活啦. 2.传输链路是单纤还是双纤? 单双纤决定了波分的型号和波道数. 3.整个传输距离是多少千米?有没有

JDBC处理大数据

1.处理大文本 1 package com.demo; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 import java.io.Reader; 9 import java.sql.Connection; 10 import java

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界 (boundary),用以产生多重信息部份 (message part).而 HTTP 服务器可以抓取 HTTP POST 的信息, 基本内容:1. 每个信息部份都要用 --[BOUNDARY_NAME] 来包装,以分隔出信息的每个部份,而最后要再加上一个 --[BOUNDARY_N

Web Service 大数据量网络传输处理

转载自:http://www.cnblogs.com/blueskybcl/archive/2010/06/03/1750421.html

JDBC 学习笔记—— 大数据…

转自:http://even2012.iteye.com/blog/1886950 1.使用JDBC处理大数据 在实际开发中,程序需要把大文本或二进制数据保存到数据库. 基本概念:大数据也称之为LOB(Large Objects),LOB又分为:clob和blob (a)clob用于存储大文本.(mysql 中采用Text) (b)blob用于存储二进制数据,例如图像.声音.二进制文等. 对MySQL而言只有blob,而没有clob,mysql存储大文本采用的是Text,其体系中的Text和bl

大数据工具集详

查询引擎 一.Phoenix 贡献者::Salesforce 简介:这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询.Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动. Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集.直接使用HBase API.协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒. Ph

SQL/NoSQL两大阵营激辩:谁更适合大数据

企业在着手推动大数据项目的过程中,经常会遇到这样一个关键性的决策难题--到底该使用哪种数据库方案?经过综合考量,最终的选项往往只剩下 SQL 与 NoSQL 两种.SQL 具有骄人的业绩以及庞大的安装基础,但 NoSQL 却能够带来可观的收益并同样拥有不少支持者.在今天的辩论当中,我们将一同听听两大阵营中各位专家的意见. Network World 网站主编 John Dix 专门组织了此次辩论并邀请到多位专家.其中两位参与专家分别是 VoltDB 公司 CTO Ryan Betts 和 Cou

小白学习大数据测试之揭秘大数据的背景与发展

大数据是个神马鬼 根据麦肯锡全球研究所给出的定义是:一种规模大到在获取.存储.管理.分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模.快速的数据流转.多样的数据类型和价值密度低四大特征. 简单点说就是指无法在一定时间范围内用传统的计算机技术进行处理的海量数据集. 大数据市场前景 阿里巴巴创办人马云来台演讲中就提到,未来的时代将不是IT时代,而是DT的时代,DT就是Data Technology数据科技,显示大数据对于阿里巴巴集团来说举足轻重. 当前医疗行业.能源行业.通