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 ...
随机推荐
- 转:django关于csrf防止跨站的ajax请求403处理
http://blog.csdn.net/wjy397/article/details/49078099
- 类和对象(12)—— this指针
首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针: ...
- ftp上传下载 java FTPClient (zhuan)
项目需要,网上搜了搜,很多,但问题也不少,估计转来转去,少了不少东西,而且也情况也不太一样.没办法,只能自己去写一个. 一, 安装sserv-u ftp服务器 版本10.1.0.1 我所设服务器 ...
- bzoj 1016 [JSOI2008]最小生成树计数——matrix tree(相同权值的边为阶段缩点)(码力)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1016 就是缩点,每次相同权值的边构成的联通块求一下matrix tree.注意gauss里的 ...
- Spring中的线程池ThreadPoolTaskExecutor介绍
前言: Java SE 5.0引入了ThreadPoolExecutor.ScheduledThreadPoolExecutor.Spring 2.x借助ConcurrentTaskExecutor和 ...
- Winsock 传输文件
文件传输的原理:发送方把文件读到socket发送端缓冲区中,接收方把socket接收端缓端冲区中的数据写到一个新文件中.当然了,大文件需要循环读写! 服务器端为发送端: #include " ...
- 第三章 Java内存模型(上)
本章大致分为4部分: Java内存模型的基础:主要介绍内存模型相关的基本概念 Java内存模型中的顺序一致性:主要介绍重排序和顺序一致性内存模型 同步原语:主要介绍3个同步原语(synchroized ...
- python ConfigParser 读取配置文件
- 问题:C#将base64转换成二进制图片;结果:c# Base64编码和图片的互相转换代码
c# Base64编码和图片的互相转换代码 Base64编码在Web方面有很多应用,譬如在URL.电子邮件方面.网上有很多相关的资源用于提供Base64编码和其他编码的转换,.Net Framewor ...
- 窗体的keypreview属性的作用是什么?(设置快捷键和钩子)
如果把窗体的KeyPreview属性设为True,那么窗体将比其内的控件优先获得键盘事件的激活权.比如窗体Form1和其内的文本框Text1都准备响应KeyPress事件,那么以下代码将首先激活窗体的 ...