JDBC之 大数据内容的传输

JDBC之 大数据内容的传输

 

什么是大数据内容?

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

 

大字符数据内容操作

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

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

数据种类数据大小MySQLOracle
字符char,varcharvarchar2
 text/longtextclob
字节bit,blob,longblobblob

 

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);
    }

 

转载于:https://www.cnblogs.com/vmax-tam/p/4153996.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值