• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL存储文本和图片的方法
    POST TIME:2021-10-18 20:39

    Oracle中大文本数据类型

    Clob  长文本类型  (MySQL中不支持,使用的是text)
    Blob  二进制类型

    MySQL数据库

    Text   长文本类型
      TINYTEXT:   256 bytes
      TEXT:     65,535 bytes    => ~64kb
      MEDIUMTEXT:  16,777,215 bytes  => ~16MB
      LONGTEXT:   4,294,967,295 bytes => ~4GB
    Blob  二进制类型

    例如:

    建表

    CREATE TABLE test(
       id INT PRIMARY KEY AUTO_INCREMENT,
       content LONGTEXT, -- 文本字段
       img LONGBLOB  -- 图片字段
    );

    存储文本时是以字符类型存储,存储图片时是以二进制类型存储,具体使用的设置参数方法,和获取数据方法不同。

    例如:

    // 存储文本时
    // 存储时,设置参数为字符流 FileReader reader
    pstmt.setCharacterStream(1, reader);
    // 获取参数时
    // 方式1:
    Reader r = rs.getCharacterStream("content");
    // 获取长文本数据, 方式2:
    System.out.print(rs.getString("content"));
    // 存储二进制图片时 
    // 设置参数为2进制流 InputStream in 
    pstmt.setBinaryStream(1, in);
    // 获取2进制流
    InputStream in = rs.getAsciiStream("img");
    /**
     * 保存照片
     * 
     */
    @Test
    public void test2(){
      String sql = "insert into test(img) values(?)";
      try{
        con = JDBCUtil.getConnection();
        pstmt = con.prepareStatement(sql);
        // 设置参数
        // 获取文本
        File file = new File("f:/a.jpg");
        InputStream in = new FileInputStream(file);
        // 设置参数为2进制流
        pstmt.setBinaryStream(1, in);
        // 执行sql
        pstmt.executeUpdate();
        in.close();
      }catch (Exception e) {
        e.printStackTrace();
      }finally{
        try {
          JDBCUtil.close(con, pstmt);
        } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
    /**
     * 获取照片
     * 
     */
    @Test
    public void test3(){
      String sql = "select * from test where id=?;";
      try{
        con = JDBCUtil.getConnection();
        pstmt = con.prepareStatement(sql);
        // 设置参数
        pstmt.setInt(1, 2);
        // 执行查询
        rs = pstmt.executeQuery();
        while(rs.next()){
          byte[] buff = new byte[1024];
          InputStream in = rs.getAsciiStream("img");
          int l=0;
          OutputStream out = new FileOutputStream(new File("f:/1.jpg"));
          while((l=in.read(buff))!=-1){
            out.write(buff, 0, l);
          }
          in.close();
          out.close();
        }
      }catch (Exception e) {
        e.printStackTrace();
      }finally{
        try {
          JDBCUtil.close(con, pstmt);
        } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    您可能感兴趣的文章:
    • MySQL实现类似Oracle序列的方案
    • mysql实现sequence功能的代码
    • Can''t connect to local MySQL through socket ''/tmp/mysql.sock''解决方法
    • Mysql常用函数大全(分类汇总讲解)
    • 利用MySQL主从配置实现读写分离减轻数据库压力
    • mysql+spring+mybatis实现数据库读写分离的代码配置
    • 如何彻底删除mysql服务(清理注册表)详解
    • 将图片储存在MySQL数据库中的几种方法
    • Ubuntu上mysql的安装及使用(通用版)
    • insert和select结合实现"插入某字段在数据库中的最大值+1"的方法
    上一篇:Ubuntu上mysql的安装及使用(通用版)
    下一篇:将图片储存在MySQL数据库中的几种方法
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信