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 ...
随机推荐
- python 中zip函数的使用
1.ta = [1,2,3] tb = [9,8,7] tc = ['a','b','c'] for (a,b,c) in zip(ta,tb,tc): print(a,b,c) 2. ta = [1 ...
- 非maven项目下载maven的jar
很多时候我们需要jar,可惜项目不是maven的,但是我们只有一个maven的坐标,那怎么办? 比如: <dependencies> <dependency> <grou ...
- mysql之 percona-xtrabackup 2.4.7安装(热备工具)
准备:os是centos6.7,提前下载并上传 percona-xtrabackup 安装包,下载网址为: https://www.percona.com/downloads/XtraBackup/L ...
- MongoDb学习网站
http://www.runoob.com/mongodb/mongodb-window-install.html
- laravel 配置文件的使用
在开发的时候有许多数据是固定的 或者是多处使用的, 那么我们可以把它保存到配置文件中, 这样将来我们可以直接从配置文件中读取这个数据,如果有特殊的数据需要改变的时候,我们也可以在单独特定的环境中,不使 ...
- Mongodb 3.6 副本集测试及添加删除节点等操作
下载tar包并安装curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.8.tgz [root@mysqlt ...
- sqlplus 设置显示格式
使用sqlplus查询显示结果,显示很乱,下面有种方法可以让她显示的更好看些.1.设置显示的宽度:设置前可以先查看当前宽度: SQL> show linesize;linesize 100SQL ...
- Java中自定义枚举(Enum)项的值,可设置为指定的值
一.代码 package base.lang; /** * ClassName: StateEnum * @Description: TODO * @author fuming * @date 20 ...
- 10-20C#基础---一维、二维数组&&冒泡排序
一.一维数组 1.定义:是某一种数据类型的数据的组合,数组用来分组基本类型或相同类型的对象.数组中的实体叫做数组的元素或成员. 2. 格式:int[ ] shuzu=new int[ 6];存放int ...
- js调试的一点小知识
1.如果想要js代码被XHTML和HTML解析,就可以使用如下方式 <script type="text/javascript"> //<![CDATA[ fun ...