標籤: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之 大資料內容的傳輸