zoukankan      html  css  js  c++  java
  • 在MySQL中存储大文件

    我们的目标:把一首mp3保存到MySQL数据库中!
      由于MySQL默认当存入的数据太大时会抛异常,所以应在my.ini中添加如下配置!max_allowed_packet=10485760,这样,可以最大存入一个10M的数据(当然可以设置更大)

      MySQL使用如下四种类型来处理文本大数据:
        类型           长度
        tinytext         28--1B(256B)
        text           216-1B(64K)
        mediumtext       224-1B(16M)
        longtext         232-1B(4G)

    我们建立如下表:

    CREATE TABLE tab_bin(
        id     INT     PRIMARY KEY AUTO_INCREMENT,
        filename    VARCHAR(100),
        data     MEDIUMBLOB
    );

     向数据库中插入文件核心代码:

    con = JdbcUtils.getConnection();
    String sql = "insert into tab_bin(filename,data) values(?, ?)";
    pstmt = con.prepareStatement(sql);
    pstmt.setString(1, "a.jpg");
    InputStream in = new FileInputStream("f:\a.jpg");//得到一个输入流对象
    pstmt.setBinaryStream(2, in);//为第二个参数赋值为流对象
    pstmt.executeUpdate();

     从数据库中取出文件核心代码:

    con = JdbcUtils.getConnection();
    String sql = "select filename,data from tab_bin where id=?";
    pstmt = con.prepareStatement(sql);
    pstmt.setInt(1, 1);
    rs = pstmt.executeQuery();
    rs.next();
    String filename = rs.getString("filename");
    OutputStream out = new FileOutputStream("F:\" + filename)//使用文件名来创建输出流对象;
    InputStream in = rs.getBinaryStream("data")//读取输入流对象;
    IOUtils.copy(in, out)//把in中的数据写入到out中;
    out.close();

     第二种方法:

     向数据库中插入文件核心代码:

    //存数据
    con = JdbcUtils.getConnection();
    String sql = "insert into tab_bin(filename,data) values(?, ?)";
    pstmt = con.prepareStatement(sql);
    pstmt.setString(1, "a.jpg");
    File file = new File("f:\a.jpg");
    byte[] datas = IOUtils.getBytes(file);//获取文件中的数据
    Blob blob = new SerialBlob(datas);//创建Blob对象
    pstmt.setBlob(2, blob);//设置Blob类型的参数
    pstmt.executeUpdate();
    
    
    //取数据
    con = JdbcUtils.getConnection();
    String sql = "select filename,data from tab_bin where id=?";
    pstmt = con.prepareStatement(sql);
    pstmt.setInt(1, 1);
    rs = pstmt.executeQuery();
    rs.next();
    String filename = rs.getString("filename");
    File file = new File("F:\" + filename) ;
    Blob blob = rs.getBlob("data");
    byte[] datas = blob.getBytes(0, (int)file.length());
    IOUtils.writeByteArrayToFile(file, datas);
  • 相关阅读:
    phpmyadmin和网页上面的乱码问题
    整理: Android HAL
    warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]-给char* 形参 传入 宏定义字符串
    ubuntu 输入法莫名其妙变繁体
    linux内核版本号添加字符/为何有时会自动添加“+”号以及怎么去掉
    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    Ubuntu 18.04 安装 Samba 服务器及配置
    linux查看版本信息
    图解:电压掉电监测电路如何实现检测工作?
    精密全波整流+一阶RC滤波器检测市电电压
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/6048373.html
Copyright © 2011-2022 走看看