JDBC之 大資料內容的傳輸

來源:互聯網
上載者:User

標籤:style   blog   io   ar   color   os   使用   sp   on   

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

 

JDBC之 大資料內容的傳輸

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.