• 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);
        }
  • 相关阅读:
    NodeJS笔记:处理非utf8编码
    SQL Server存储过程中的异常处理
    "岛主" 同学给我出的算法题
    学 Win32 汇编[18]: 关于压栈(PUSH)与出栈(POP) 之二
    如何在数据表中存取图片 回复 "三足乌" 的问题
    学 Win32 汇编[19]: 查看二进制等相关函数
    如何删除动态数组的指定元素 回复 "Splendour" 的部分问题
    学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一
    学 Win32 汇编[22] 逻辑运算指令: AND、OR、XOR、NOT、TEST
    学 Win32 汇编[20]: 洞察标志寄存器
  • 原文地址:https://www.cnblogs.com/vmax-tam/p/4153996.html
Copyright © 2020-2023  润新知