把MP3保存到數據庫中


使用JdbcUtils得到連接con

 java.sql包下的Interface Blob----其實現類SerialBlob

Blob是一個可以存儲二進制文件的容器。

BLOB常常是數據庫中用來存儲二進制文件的字段類型。

MySQL中,BLOB是個類型系列,包括TinyBlob,Blob,MediumBlob,LongBlob,這幾個類型之間的唯一區別是在存儲文件的最大 大小上不同。

類型   大小(單位:字節)

TinyBlob 最大  255

Blob 最大  65k

MediumBlob  中等 16M

LongBlob 最大 4G

所需數據庫結構

 

 1 //把MP3保存到數據庫中
 2     @Test
 3     public void fun() throws Exception{
 4         Connection con=JdbcUtils.getConnection();
 5         String sql="insert into tab_bin values(?,?,?)";
 6         PreparedStatement pstmt=con.prepareStatement(sql);
 7         pstmt.setInt(1, 1);
 8         pstmt.setString(2, "Circus.mp3");
 9         //需要得到blob
10         /*1.我們有的是文件,目標是Blob
11          * 2.先把文件變成byte[]
12          * 3.再使用byte[]創建Blob
13          * */
14         //把文件轉換成byte[]
15         byte[] bytes=IOUtils.toByteArray(new FileInputStream("F:/CloudMusic/Circus.mp3"));
16         
17         Blob blob=new SerialBlob(bytes);
18         //設置參數
19         pstmt.setBlob(3, blob);
20         
21         pstmt.executeUpdate();
22     }

 從數據庫中讀MP3數據,然后寫到磁盤中

 

 1 @Test
 2     public void fun2() throws Exception{
 3         Connection con=JdbcUtils.getConnection();
 4         System.out.println(con);
 5         String sql="select * from tab_bin where filename=?";
 6         PreparedStatement pstmt=con.prepareStatement(sql);
 7         pstmt.setString(1, "Circus.mp3");
 8         ResultSet rs= pstmt.executeQuery();
 9         System.out.println("查詢成功");
10         //獲取rs中的名為data的數據----數據庫中的名
11         if(rs.next()){
12             Blob blob=rs.getBlob("data");
13             /*把Blob變成硬盤上的文件
14              * 
15              * 1.通過Blob得到輸入流對象
16              * 2.自己創建輸出流對象
17              * 3.把輸入流的數據寫入到輸出流中
18              * */
19             InputStream in=blob.getBinaryStream();//20             //
21             OutputStream out=new FileOutputStream("G:/金泰妍1.MP3");
22             IOUtils.copy(in, out);
23         }

 

IOUtils是一個類---封裝了IO操作的相關類----提供了對流的操作

常用方法

copy這個方法可以拷貝流

copy(inputstream,outputstream)
copy(inputstream,writer)
copy(inputstream,writer,encoding)
copy(reader,outputstream)
copy(reader,writer)
copy(reader,writer,encoding)

copyLarge這個方法適合拷貝大的數據流,比如2G以上。

copyLarge(reader,writer) 默認會用1024*4的buffer來讀取
copyLarge(reader,writer,buffer)

read從一個流中讀取數據

read(inputstream,byte[])
read(inputstream,byte[],offset,length) 
//offset是buffer的偏移值,length是讀取的長度

read(reader,char[])
read(reader,char[],offset,length)

等等方法,見IOUtils類

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM