`

用jdbc访问二进制类型的数据

    博客分类:
  • JDBC
阅读更多

1、创建数据表(MYSQL数据库)

create table big_blob (
     id int(10), 
     blob_txt blob
);

 

2、JdbcUtils工具类

package com.sunrex;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 东南西北风
 * @author Administrator
 *
 */
public final class JdbcUtils {
	
	private static Connection conn = null;
	/* 访问数据库的url*/
	private final static String DATABASE_URL = 
		"jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=UTF8";
	
	private final static String DATABASE_USERNAME = "root";
	
	private final static String DATABASE_PASSWORD = "root";

	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USERNAME, DATABASE_PASSWORD);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	private JdbcUtils(){}
	
	public static Connection getConnection() {
		return conn;
	}
	
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		try {
			if(rs!=null) rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(stmt!=null)
					stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if(conn!=null) 
						conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 

3、二进制文件操作类

package com.sunrex.demo06;

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

import com.sunrex.JdbcUtils;

/**
 * 用jdbc访问二进制类型的数据
 * 在数据库中,经常需要用到大字段类型,
 * 		如oracle中long/blob/clob,
 * 		sqlserver中text/image,
 * 		mysql中的text/longtext/clob/blob。 
 */
public class BlobTest {
	public static void main(String[] args) throws Exception {
//		insert();
		read(1);
	}
	
	/**
	 * 添加数据
	 * @throws Exception
	 */
	public static void insert() throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = JdbcUtils.getConnection();
			//---注意:如果数据库中设置的是blob类型字段,二进制的最大容量不能超过64K
			String sql = "insert into big_blob (id, blob_txt) values (?, ?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, 1);
			
			//使用字节流,读取文本信息
			File file = new File("blob.jpg");
			InputStream is = new BufferedInputStream(new FileInputStream(file));
			pstmt.setBinaryStream(2, is, (int)file.length());//填充二进制流
			
			is.close();
			pstmt.executeUpdate();
		} finally {
			JdbcUtils.close(conn, pstmt, rs);
		}
	}
	
	/**
	 * 读取数据
	 * @param id
	 */
	private static void read(int id) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = JdbcUtils.getConnection();
			//---注意:如果数据库中设置的是blob类型字段,二进制的最大容量不能超过64K
			String sql = "select blob_txt from big_blob where id=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, id);
			rs =pstmt.executeQuery();
			
			while(rs.next()) {
//				//读取方法一:
//				Blob blob = rs.getBlob("blob_txt");
//				InputStream is = blob.getBinaryStream();//输入流
				//读取的方法二:
				InputStream is = rs.getBinaryStream("blob_txt");
				byte[] bytes = new byte[1024];
				
				//输出流
				File file = new File("blob_bak.jpg");
				OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
				for(int i=0; (i=is.read(bytes))>0;) {
					os.write(bytes, 0, i);
				}
				
				os.close();
				is.close();
			}
		} finally {
			JdbcUtils.close(conn, pstmt, rs);
		}
	}
}

 

分享到:
评论

相关推荐

    JDBC 3.0数据库开发与设计

    目录 第1章 JDBC概述 1.1 JDBC简介 1.2 JDBC3.0规范 1.3 JDBC3.0 API的新特点 1.3.1 JDBC 3.0 API的一致性 ...9.3.2 将数据库的图象二进制数据显示成图片 9.4 Java开发中的其他技术 9.5 本章小结

    Java核心技术II(第8版)

    1.3 读入和写出二进制数据 1.3.1 随机访问文件 1.4 ZIP文档 1.5 对象流与序列化 1.5.1 理解对象序列化的文件格式 1.5.2 修改缺省的序列化机制 1.5.3 序列化单例和类型安全的枚举 1.5.4 版本管理 1.5.5 为克隆使用...

    java数据库连接方法和实现

     JDBC-ODBC桥 这种类型的驱动把所有JDBC的调用传递给ODBC,再让后者调用数据库本地驱动代码(也就是数据库厂商提供的数据库操作二进制代码库,例如Oracle中的oci.dll)。 类型2  本地API驱动 这种类型的驱动通过...

    javaweb学习总结——使用JDBC处理MySQL大数据

    本篇文章主要介绍了JDBC处理MySQL大数据,有时是需要用程序把大文本或二进制数据直接保存到数据库中进行储存的,非常具有实用价值,需要的朋友可以参考下。

    Java数据库编程宝典2

    14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...

    Java数据库编程宝典4

    14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...

    Java数据库编程宝典1

    14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...

    Java数据库编程宝典3

    14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...

    java面试题(题库全).doc

    &操作符将两个操作数按二进制位进行与运算,结果为1的位是两个操作数对应的位都是1。&&操作符是短路逻辑运算符,如果第一个操作数为false,则第二个操作数不再进行运算。 这些问题都是java面试中常见的问题,涵盖了...

    基于Java Swing + MySQL + JDBC 的图书管理系统.zip

    二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...

    JavaWeb实战开发

    6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据? ? ?7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)? ? ?8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与...

    MySQL5 权威指南第3版中文版_part1

     15.12 二进制数据(BLOB)和图像  15.13 存储过程  15.14 SP Administrator  第16章 Perl  16.1 编程技巧  16.2 示例:删除无效的数据记录(mylibrary)  16.3 CGI示例:图书管理(mylibrary)  16.4 CGI ...

    MySQL 5权威指南(第3版) 中文版 下载地址

     15.12 二进制数据(BLOB)和图像  15.13 存储过程  15.14 SP Administrator  第16章 Perl  16.1 编程技巧  16.2 示例:删除无效的数据记录(mylibrary)  16.3 CGI示例:图书管理(mylibrary)  ...

    MySQL 5.1中文手冊

    2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装...

    ssh(structs,spring,hibernate)框架中的上传下载

     以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。  工程...

    MySQL5.1参考手册官方简体中文版

    2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装...

    mysql官方中文参考手册

    2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装...

    MYSQL中文手册

    2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过...

Global site tag (gtag.js) - Google Analytics