java [30] 二进制文件的存取(图片、视频、压缩包等)

数据库:

字段类型需要是blob类型

代码:存入数据库

package com.test1;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BlobTest {
	public static void main(String[] args) throws IOException {
	Create();
	}
	
	private static void Create() throws IOException {
		// TODO Auto-generated method stub
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
			//加载驱动建立连接
			conn = jdbcUtils.getConnection();
			//预处理语句
			String sql = "insert into blob_test(pic) values (?)";
			ps = conn.prepareStatement(sql);
			File file = new File("sh.jpg");
			//通过字节流存取数据如图片压缩包视频等
			InputStream in = new BufferedInputStream(new FileInputStream(file));
			
			
			ps.setBinaryStream(1, in,(int)file.length());
			//执行
			int i = ps.executeUpdate();
			in.close();
			System.out.println("i = "+ i);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			jdbcUtils.free(rs, ps, conn);
		}
	}
	
}

存入到数据库后数据库是看不出来的:

从数据库读取文件:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class BlobTest {
	public static void main(String[] args) throws IOException {
	//Create();
	Read(1);
	
	}
	
	private static void Read(int id) throws IOException {
		// TODO Auto-generated method stub
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
			//加载驱动建立连接
			conn = jdbcUtils.getConnection();
			//预处理语句
			//String sql = "insert into tst_test(big_txt) values (?)";
			String sql = "select pic from blob_test where id =?";
			ps = conn.prepareStatement(sql);
			ps.setInt(1, id);
			//执行
			rs = ps.executeQuery();
			while (rs.next()) {
				InputStream in= rs.getBinaryStream("pic");
				
				//获取数据存入文本
				File file = new File("a.jpg");
				OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
				byte[] bys = new byte[1024];
				for (int i=0;(i=in.read(bys))>0;){
					out.write(bys, 0, i);
				}
				out.close();
				in.close();
			}
			
			//System.out.println(rs);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			jdbcUtils.free(rs, ps, conn);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/81944341