JDBC-Bolb数据类型存储和查询(练习)

Posted Vodka~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC-Bolb数据类型存储和查询(练习)相关的知识,希望对你有一定的参考价值。

//Blob.java
package PreparedStatementCURD;

import Instrument.GetConnection;
import org.junit.Test;

import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;

/**
 * @description Blob 数据的插入练习(实际开发通常是设立保存文件的服务器,保存图片或者视频的url,提高相关数据库的性能
 * @author Vodka
 * @date 2021/07//22:03
 */

/*
*    1.mysql中,BLOB是一个二进制大型对象,可以存储大量数据的容器,它能容纳不同大小的数据。
*    2.插入BLOB类型的数据必须使用PreparedStatement, 因为BLOB类型的数据无法使用字符串拼接。
*    3.MySQL有四种BLOB类型(不同之处在于最大信息存储量的不同,其他等同)
*             类型              大小(单位:字节)
*           TinyBlob         最大 255
*           Blob             最大 65K
*           MediumBlob       最大 16M
*           LongBlob         最大 4G
*    4.通常根据需要存储的数据来定义不同的BLOB类型,当存储文件过大时,会使数据库性能下降。
*    5.如果在指定了相关的Blob类型以后,报错:  xxx too large ,这时就要去修改mysql安装目录下,找到my.ini文件,
*     加上配置参数 :  max_allowed_packet = 16M.  然后重启MySQL服务
* */

public class BLOB {
    @Test
    public void BlobInsert(){
        Connection conn  = null;
        PreparedStatement ps = null;
        try {
            //建立连接,向数据库插入图片
           conn = GetConnection.getConnection();
           String sql = "Update Student set Photo = ? where Sno = ?";
           ps = conn.prepareStatement(sql);
           FileInputStream Image = new FileInputStream(new File("D:\\\\Jdbc\\\\src\\\\Image\\\\img .jpg"));
           ps.setBlob(1,Image);
           ps.setObject(2,3);
           System.out.println( ps.executeUpdate());
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}




//BlobQuery.java
package PreparedStatementCURD;
import Instrument.*;

import javax.sound.midi.Instrument;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * @author Vodka
 * @date 2021/07//10:38
 */
public class BlobQuery {
      public static void main(String []args){
          try {
              BQ();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }

      public static void BQ () throws Exception{
          Connection conn = GetConnection.getConnection();
          String sql = "select photo from Student where Sno= ?";
          PreparedStatement ps = conn.prepareStatement(sql);
          ps.setObject(1,3);
          ResultSet rs = ps.executeQuery();
          //使用可移植性强,可读性好的代码读取
          while(rs.next()){
              java.sql.Blob bl = rs.getBlob("Photo");
             //将Blob类型的字段下载下来,以文件方式保存本地
              InputStream is = bl.getBinaryStream();
              FileOutputStream fos = new FileOutputStream("img.jpg");
              byte[] buffer = new byte[1024];
              int len ;
              while((len = is.read(buffer)) != -1){
                  fos.write(buffer,0,len);
              }
              is.close();
              fos.close();
          }
      }
}

以上是关于JDBC-Bolb数据类型存储和查询(练习)的主要内容,如果未能解决你的问题,请参考以下文章

代码片--练习匿名内部类

C语言进阶笔记揭秘数据内部存储 !!

C语言进阶笔记揭秘数据内部存储 !!

C语言进阶笔记揭秘数据内部存储 !!

十一子查询详解

十一子查询详解