首页 > 代码库 > JDBC之 大数据内容的传输

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

 

JDBC之 大数据内容的传输