参考网址: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类型数据的更多相关文章

  1. MySQL的blob类型

    MySQL中的Blob类型 MySQL中存放大对象的时候,使用的是Blob类型.所谓的大对象指的就是图片,比如jpg.png.gif等格式的图片,文档,比如pdf.doc等,以及其他的文件.为了在数据 ...

  2. mybatis 处理CLOB/BLOB类型数据

    BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ...

  3. 【时区问题】SpringBoot+mybatis查询mysql的datetime类型数据时间差14小时

    [时区问题]MyBatis查询MySQL的datetime类型数据时间差14小时 故障解决方式 与数据库连接时,定义时区,避免mybatis框架从mysql获取时区.在连接上加上 serverTime ...

  4. 【mysql】Blob类型

    来源:http://qgyang.blog.sohu.com/115847378.html 一般在需要存储较大数据时使用Bolb MySql的Bolb四种类型 MySQL中,BLOB是一个二进制大型对 ...

  5. JDBC基础学习(三)—处理BLOB类型数据

    一.BLOB类型介绍      在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据.      在MySQL中有四种BLOB类型.          实际使 ...

  6. MySQL的BLOB类型(解决mysql不支持mb4编码的时候存储emoji表情问题)

    今天在存储emoji表情的时候,发现无法存储,mysql版本太低也没办法使用uft8mb4格式编码,只能将数据字段设置为blob BLOB是一个二进制大对象,可以容纳可变数量的数据.有4种BLOB类型 ...

  7. <十>JDBC_处理Blob类型数据

    /*  * 读取BLOB数据:  *  使用getBlob方法读取到Blob对象  *  调用Blob的getBinaryStream(方法得到输入流,在使用IO操作  * */ @Test publ ...

  8. OLEDB存取BLOB型数据

    现代数据库系统除了支持一些标准的通用数据类型以外,大多数还支持一种称之为BLOB型的数据. BLOB全称为big large object bytes, 大二进制对象类型,这种类型的数据通常用于存储文 ...

  9. 插入与读取Blob类型数据

    BlobTest package com.aff.PreparedStatement; import java.io.File; import java.io.FileInputStream; imp ...

随机推荐

  1. untra edit 自动补全

    选择“高级-配置-编辑器-自动完成”,勾选“自动显示‘自动完成’对话框”,并在其中定义好“当输入x个字符”时,自动补全.

  2. Mesos-slave启动处理记录

    1. work_dir错误导致启动异常 /etc/mesos-slave/work_dir设置的目录不存在或者权限不够将会导致启动异常. 2. 根据日志信息以及status信息来判断问题 通过serv ...

  3. 洛谷【P1048】采药

    浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  4. ubuntu lts install licode tag pre-v5.4

    1. Requirements Ubuntu 14.04 LTS 2. Clone Licode codeYou first need to clone our code from github.Yo ...

  5. Azure disk iops的测试

    在Public Cloud中,VM.Storage和Network是IaaS的三大基础.本文将介绍在Azure的VM上测试磁盘IOPS的工具和方法. 一.添加磁盘.初始化磁盘 1.添加磁盘 把相应的信 ...

  6. 配置进程外Session

    配置进程外Session: (1)将服务器Session信息存储在进程外           <1> 首先,开启asp.net state 服务: 控制面板 -> 程序和功能 -&g ...

  7. (转)在Windows平台上安装Node.js及NPM模块管理

    本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...

  8. Java-API:java.lang百科

    ylbtech-Java-API:java.lang百科 java.lang是提供利用 Java 编程语言进行程序设计的基础类.最重要的类是Object(它是类层次结构的根)和 Class(它的实例表 ...

  9. socket关闭

    首先应该了解win32 api closesocket,这里只说msdn文档中叙述不够清晰的地方. 首先说缺省情况:l_onoff为0,closesocket立刻返回,但底层依然在持续发包,并且试图优 ...

  10. react过渡动画效果的实现,react-transition-group

    本文介绍react相关的过渡动画效果的实现 有点类似vue的transition组件,主要用于组件mount和unmount之前切换时应用动画效果 安装 cnpm install react-tran ...