• JDBC 操作BLOB类型字段


    MySQL BLOB类型

    • MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。
    • 插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。
    • MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的)
      在这里插入图片描述
    • 实际使用中根据需要存入的数据大小定义不同的BLOB类型。
    • 需要注意的是:如果存储的文件过大,数据库的性能会下降。
    • 如果在指定了相关的Blob类型以后,还报错:xxx too large,那么在mysql的安装目录下,找my.ini文件加上如下的配置参数: max_allowed_packet=16M。同时注意:修改了my.ini文件之后,需要重新启动mysql服务。

    创建的表数据类型:
    在这里插入图片描述

    向数据表中插入大数据类型:

    package com.atguigu5.blob;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Blob;
    import java.sql.Connection;
    import java.sql.Date;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import org.junit.Test;
    
    import com.atguigu3.bean.Customer;
    import com.atguigu3.util.JDBCUtils;
    
    /*
     * 测试使用PreparedStatement操作Blob类型数据
     */
    public class BlobTest {
    	
    	//向customers中插入Blob类型字段
    	@Test
    	public void testInsert() throws Exception {
    		Connection conn = JDBCUtils.getConnectio();
    		
    		String sql="insert into customers(name,email,birth,photo)values(?,?,?,?)";
    		PreparedStatement ps = conn.prepareStatement(sql);
    		
    		ps.setObject(1,"妲己");
    		ps.setObject(2,"daji@163.com");
    		ps.setObject(3,"2000-03-01");
    		FileInputStream is= new FileInputStream(new File("01.jpg"));
    		ps.setBlob(4, is);
    		ps.execute();
    		JDBCUtils.closeResource(conn, ps);
    	}
    	
    	//查询customers中的Blob字段
    	@Test
    	public void testQuery()   {
    		Connection conn=null;
    		PreparedStatement ps=null;
    		InputStream is=null;
    		FileOutputStream fos=null;
    		ResultSet rs=null;
    		try {
    			conn = JDBCUtils.getConnectio();
    			String sql="select id,name,email,birth,photo from customers where id=?";
    			ps = conn.prepareStatement(sql);			
    			ps.setObject(1,21);
    			rs = ps.executeQuery();
    			if (rs.next()) {
    				//方式一:
    //			int id = rs.getInt(1);
    //			String name = rs.getString(2);
    //			String email = rs.getString(3);
    //			Date birth = rs.getDate(4);
    				//方式二:(推荐)
    				int id = rs.getInt("id");
    				String name = rs.getString("name");
    				String email = rs.getString("email");
    				Date birth = rs.getDate("birth");
    				
    				
    				Customer cust = new Customer(id,name,email,birth);
    				System.out.println(cust);
    				
    				//将Blob类型字段下载下来,保存本地
    				Blob photo = rs.getBlob("photo");
    				is = photo.getBinaryStream();
    				fos=new FileOutputStream("daji.jpg");
    				byte[] buffer=new byte[1024];
    				int len;
    				while((len=is.read(buffer))!=-1) {
    					fos.write(buffer,0,len);
    				}
    				
    			}
    		
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				if(is!=null)
    				is.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			
    			try {
    				if(fos!=null)
    				fos.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			
    			//
    			JDBCUtils.closeResource(conn, ps,rs);
    		}
    		
    		
    	}
    	
    }
    
    
  • 相关阅读:
    css dropdown menu
    Understanding Delegated JavaScript Events
    AngularJS-Learning ui-router angular-transitions
    javascript sorting/ v8 sorting
    Sublime Text 3 新手上路:必要的安裝、設定與基本使用教學
    express with bower in websotrm
    angularjs transitions
    create a nodejs npm package
    nodejs module/require
    stylus , another css processor
  • 原文地址:https://www.cnblogs.com/James-221/p/13647465.html
Copyright © 2020-2023  润新知