zoukankan      html  css  js  c++  java
  • 把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类

  • 相关阅读:
    AndroidStudio build.gradle 报错
    点九图片的显示内容区域应作何理解
    【Android Studio快捷键】之导入相应包声明(import packages)
    ListView之EmptyView
    Activity 设置切换动画
    android 中 系统日期时间的获取
    解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题
    android选择图片或拍照图片上传到服务器(包括上传参数)
    Spring 4 官方文档学习(十)数据访问之OXM
    Spring 4 官方文档学习(十)数据访问之ORM
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/10718389.html
Copyright © 2011-2022 走看看