JDBC-处理图片等大的字节数据

该博客演示了如何使用Java JDBC进行Blob类型数据的操作,包括从数据库读取和写入大字节流,如图片文件。示例代码展示了创建表、插入带有图片的记录以及从数据库读取并保存到本地文件的流程。
摘要由CSDN通过智能技术生成
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.sql.SQLException;

import com.mysql.jdbc.Clob;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement;


public class BlobTest {

	/**
	 * 
	 * 数据库中读写大的字节流
	 * @param args
	 * @throws SQLException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws SQLException, IOException {
		// TODO Auto-generated method stub
//		create();
		read();
	}
	
	static void create() throws SQLException, FileNotFoundException {
		Connection conn = null;
		PreparedStatement ps = null;	
		ResultSet rs = null;
		try {

			conn = JdbcUtil.getConnection();

			String sql = "insert into blob_t values(1 ,?)";
			
			ps = (PreparedStatement) conn.prepareStatement(sql);
			
			File file = new File("src/OK.jpg");
			InputStream input = new BufferedInputStream(new FileInputStream(file));

			ps.setBinaryStream(1, input, (int)file.length());
			
			int count = ps.executeUpdate();

			System.out.println(count + " row affected");
			
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}

		} finally {
			JdbcUtil.free(rs, ps, conn);
		}
	}
	
	static void read() throws SQLException, IOException {
		Connection conn = null;
		Statement stat = null;
		ResultSet rs = null;
		try {

			conn = JdbcUtil.getConnection();

			stat = (Statement) conn.createStatement();

			rs = (ResultSet) stat.executeQuery("select blob_bit from blob_t");

			// 处理结果
			while (rs.next()) {
//				Clob clob =  (Clob) rs.getClob("blob_bit");
//				Reader reader  = clob.getCharacterStream();
				InputStream input = rs.getBinaryStream(1);
				File file = new File("OK_mysql.jpg");
				OutputStream output = new BufferedOutputStream(new FileOutputStream(file));
				byte[] buf = new byte[2048];
				int count = 0;
				while((count=input.read(buf)) >0 ){
					output.write(buf, 0, count);
				}
				output.close();
				input.close();
			}
		} finally {
			JdbcUtil.free(rs, stat, conn);
		}
	}

}

注意 ,对应的mysql属性段的类型为blob
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值