mysql存取blob类型数据
参考网址:http://www.cnblogs.com/jway1101/p/5815658.html
首先是建表语句,需要实现将表建立好。
CREATE TABLE `blobtest` (
`primary_id` varchar(32) NOT NULL,
`bank_id` varchar(32) NOT NULL,
`bank_name` varchar(64) NOT NULL,
`blob_data` blob NOT NULL,
PRIMARY KEY (`primary_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Blob类型数据存取测试用表'
然后是数据库连接的工具类:
package blobtest; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; public class JDBCUtil { /*使用静态代码块完成驱动的加载*/
static {
try {
String driverName = "com.mysql.jdbc.Driver";
Class.forName(driverName);
} catch (Exception e) {
e.printStackTrace();
}
}
/*提供连接的方法*/
public static Connection getConnection() {
Connection con = null;
try {
//连接指定的MMySQL数据库,三个参数分别是:数据库地址、账号、密码
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf8", "root", "w513723");
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
/*关闭连接的方法*/
public static void close(ResultSet rs, Statement stmt, Connection con) {
try {
if (rs != null)
rs.close();
} catch (Exception ex) {
ex.printStackTrace();
}
try {
if (stmt != null)
stmt.close();
} catch (Exception ex) {
ex.printStackTrace();
}
try {
if (con != null)
con.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
接下来是真正的插入数据库的java代码:
package blobtest; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class ReadWriteBlobwithMysql
{
private Connection con;
private Statement stmt; public Statement getStmt()
{
return stmt;
} public void setStmt(Statement stmt)
{
this.stmt = stmt;
} public ResultSet getRs()
{
return rs;
} public void setRs(ResultSet rs)
{
this.rs = rs;
} ResultSet rs; public Connection getCon()
{
return con;
} public void setCon(Connection con)
{
this.con = con;
} public void insert(Connection con) throws SQLException
{
String fileName = "E:\\JavaProject\\HelloWorld\\src\\blobtest\\test.html";
File file = new File(fileName); try
{
FileInputStream fis = new FileInputStream(file);
String sql = "insert into blobtest values('12','0000','平安银行',?)";
PreparedStatement prest = con.prepareStatement(sql);
prest.setBlob(1, fis,file.length());
prest.execute();
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} public ReadWriteBlobwithMysql(Connection con)
{
this.setCon(con);
try
{
stmt = con.createStatement();
} catch (SQLException e)
{
e.printStackTrace();
}
} public static void main(String[] args)
{
Connection con = JDBCUtil.getConnection();
ReadWriteBlobwithMysql dao = new ReadWriteBlobwithMysql(con);
try
{
// dao.createTable();
dao.insert(con);
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
JDBCUtil.close(dao.getRs(), dao.getStmt(), dao.getCon());
}
} }
使用select语句查看一下执行结果,第二条是使用程序插入的,其他的是使用sql语句直接插入的:

下面是增加了从数据库读取blob数据的java代码,增加了queryBlob(。。。)函数:
package blobtest; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class ReadWriteBlobwithMysql
{
private Connection con;
private Statement stmt; public Statement getStmt()
{
return stmt;
} public void setStmt(Statement stmt)
{
this.stmt = stmt;
} public ResultSet getRs()
{
return rs;
} public void setRs(ResultSet rs)
{
this.rs = rs;
} ResultSet rs; public Connection getCon()
{
return con;
} public void setCon(Connection con)
{
this.con = con;
} public void insert(Connection con) throws SQLException
{
String fileName = "E:\\JavaProject\\HelloWorld\\src\\blobtest\\test.html";
File file = new File(fileName); try
{
FileInputStream fis = new FileInputStream(file);
String sql = "insert into blobtest values('12','0000','平安银行',?)";
PreparedStatement prest = con.prepareStatement(sql);
prest.setBlob(1, fis, file.length());
prest.execute();
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void queryBlob(String id, Connection con) throws IOException
{
String fileName = "E:\\JavaProject\\HelloWorld\\src\\blobtest\\test1.html";
String sql = "select * from blobtest where primary_id= ?";
try
{
PreparedStatement prest = con.prepareStatement(sql);
prest.setString(1, id);
ResultSet rs = prest.executeQuery();
while (rs.next())
{
Blob bl = rs.getBlob("blob_data");// 数据保存在表的blob_data字段中,这里取出这里保存的数据。
InputStream is = bl.getBinaryStream(); // 查看blob,可以通过流的形式取出来。 注意一定要是用流的方式读取出来
BufferedInputStream buffis = new BufferedInputStream(is);
// 保存到buffout
BufferedOutputStream buffout = new BufferedOutputStream(new FileOutputStream(fileName));
byte[] buf = new byte[1024];
int len = buffis.read(buf, 0, 1024);
while (len > 0)
{
buffout.write(buf);
len = buffis.read(buf, 0, 1024);
}
buffout.flush();
buffout.close();
buffis.close();
} } catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} public ReadWriteBlobwithMysql(Connection con)
{
this.setCon(con);
try
{
stmt = con.createStatement();
} catch (SQLException e)
{
e.printStackTrace();
}
} public static void main(String[] args)
{
Connection con = JDBCUtil.getConnection();
ReadWriteBlobwithMysql dao = new ReadWriteBlobwithMysql(con);
try
{
// dao.createTable();
// dao.insert(con);
dao.queryBlob("12",con);
} catch (IOException e)
{
e.printStackTrace();
} finally
{
JDBCUtil.close(dao.getRs(), dao.getStmt(), dao.getCon());
}
} }

mysql存取blob类型数据的更多相关文章
- MySQL的blob类型
MySQL中的Blob类型 MySQL中存放大对象的时候,使用的是Blob类型.所谓的大对象指的就是图片,比如jpg.png.gif等格式的图片,文档,比如pdf.doc等,以及其他的文件.为了在数据 ...
- mybatis 处理CLOB/BLOB类型数据
BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ...
- 【时区问题】SpringBoot+mybatis查询mysql的datetime类型数据时间差14小时
[时区问题]MyBatis查询MySQL的datetime类型数据时间差14小时 故障解决方式 与数据库连接时,定义时区,避免mybatis框架从mysql获取时区.在连接上加上 serverTime ...
- 【mysql】Blob类型
来源:http://qgyang.blog.sohu.com/115847378.html 一般在需要存储较大数据时使用Bolb MySql的Bolb四种类型 MySQL中,BLOB是一个二进制大型对 ...
- JDBC基础学习(三)—处理BLOB类型数据
一.BLOB类型介绍 在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据. 在MySQL中有四种BLOB类型. 实际使 ...
- MySQL的BLOB类型(解决mysql不支持mb4编码的时候存储emoji表情问题)
今天在存储emoji表情的时候,发现无法存储,mysql版本太低也没办法使用uft8mb4格式编码,只能将数据字段设置为blob BLOB是一个二进制大对象,可以容纳可变数量的数据.有4种BLOB类型 ...
- <十>JDBC_处理Blob类型数据
/* * 读取BLOB数据: * 使用getBlob方法读取到Blob对象 * 调用Blob的getBinaryStream(方法得到输入流,在使用IO操作 * */ @Test publ ...
- OLEDB存取BLOB型数据
现代数据库系统除了支持一些标准的通用数据类型以外,大多数还支持一种称之为BLOB型的数据. BLOB全称为big large object bytes, 大二进制对象类型,这种类型的数据通常用于存储文 ...
- 插入与读取Blob类型数据
BlobTest package com.aff.PreparedStatement; import java.io.File; import java.io.FileInputStream; imp ...
随机推荐
- poj1463 Strategic game[树形DP]
求一棵树每条边都被选上的点覆盖掉的最少选点数. 一条边被覆盖掉,必须他父亲和儿子中选一个..这不就是比NOIP2018D2T3还裸的暴力么.水掉. lyd给的练习题都什么**玩意儿.. code不挂了 ...
- mezzanine安装配置
ubuntu 14.04 cd /var/wwwmkdir testingcd testingvirtualenv venv --python=python3. venv/bin/activate p ...
- Azure ASM到ARM迁移 (三) Reserved IP的迁移
Azure的ASM下,很多用户的应用种域名的解析在DNS服务器种都采用A记录的方式,所以很多用户都在Azure上采用了Reserved IP. 关于Reserved IP,可以参考http://www ...
- boost::ASIO的同步方式和异步方式
http://blog.csdn.net/zhuky/article/details/5364574 http://blog.csdn.net/zhuky/article/details/536468 ...
- 机器学习:逻辑回归(scikit-learn 中的逻辑回归)
一.基础理解 使用逻辑回归算法训练模型时,为模型引入多项式项,使模型生成不规则的决策边界,对非线性的数据进行分类: 问题:引入多项式项后,模型变的复杂,可能产生过拟合现象: 方案:对模型正则化处理,损 ...
- SpringBoot自动化配置之一:SpringBoot内部的一些自动化配置原理
springboot用来简化Spring框架带来的大量XML配置以及复杂的依赖管理,让开发人员可以更加关注业务逻辑的开发. 比如不使用springboot而使用SpringMVC作为web框架进行开发 ...
- PostgreSQL 监控磁盘使用
监控磁盘使用 1. 判断磁盘用量 每个表都有一个主要的堆磁盘文件,大多数数据都存储在其中.如果一个表有着可能会很宽(尺寸大)的列, 则另外还有一个TOAST文件与这个表相关联, 它用于存储因为太宽而不 ...
- JAVA web 相关知识点
1: web的三个核心标准: URL: http VS https HTTP: 通信协议,客户端/服务器端信息交互方式; 特点是无状态: HTML: 2: HT ...
- Microsoft Sync Framework下的快速开发同步程序
Microsoft Sync Frameworks简称MSF,是一个综合的同步平台,MSF支持应用程序,服务,设备的在线以及离线同步.MSF主要有以下几个部件组成: * Sync Servic ...
- 问题:Oracle 树形遍历;结果:使用oracle进行遍历树操作
使用oracle进行遍历树操作 1:首先数据库中表必须是树形结构的 2:super_department_id 为 department_id 的父节点编号 3:以下语句的执行结果是:depart ...