mysql中写⼊blob类型的⽅法
1、BLOB类型
1、BLOB类型介绍
(1)BLOB类型的含义
BLOB (binary large object),⽤来存储⼆进制⼤对象的字段类型。
BLOB往往是⼀个⼤⽂件,典型的BLOB是⼀张图⽚、⼀个声⾳或⼀个视频⽂件,由于它们的尺⼨,必须使⽤特殊的⽅式来处理(例如:上传、下载或者存放到⼀个数据库)。
处理BLOB的主要思想就是让⽂件处理器(如数据库管理器)不去理会⽂件是什么,⽽是关⼼如何去处理它。但也有专家强调,这种处理⼤数据对象的⽅法是把双刃剑,它有可能引发⼀些问题,如存储的⼆进制⽂件过⼤,会使数据库的性能下降。
(2)BLOB类型系列
MySQL中,BLOB是个类型系列,共包括四种BLOB类型:TinyBlob、Blob、MediumBlob、LongBlob,这⼏个类型之间的唯⼀区别是在存储⽂件的最⼤尺⼨不同。
字段类型 最⼤长度(字节) 存储需求
TinyBlob 255 值的长度加上⽤于记录长度的1个字节(8位)
Blob 65K值的长度加上⽤于记录长度的2个字节(16位)
MediumBlob 16M值的长度加上⽤于记录长度的3个字节(24位)
LongBlob 4G 值的长度加上⽤于记录长度的4个字节(32位)
⼆进制⽂件的处理:
1.创建blob。
2.向blob中写⼊字节。
3.将blob写到数据库
1、插⼊Blob类型的数据
插⼊Blob类型的数据时,需要注意必须要⽤PreparedStatement,因为Blob类型的数据是不能够⽤字符
串来拼的,在传⼊了SQL语句后,就需要去调⽤PreparedStatement对象中的setBlob(int index , InputStream in)⽅法来设置传⼊的的参数,其中index表⽰Blob 类型的数据所对应的占位符(?)的位置,⽽InputStream类型的in表⽰被插⼊⽂件的节点流。
2、读取Blob类型的数据
读取Blob类型相对来说⽐较容易,当获取了查询的结果集之后,使⽤getBlob()⽅法读取到Blob对象,然后调⽤Blob的getBinaryStream()⽅法得到输⼊流,再使⽤IO操作进⾏⽂件的写⼊操作即可。
代码如下
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 org.junit.Test;
public class TestBlob {
@Test
public void getBlob(){//读取Blob数据
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = Connection();
String sql = "SELECT id,name,age,picture FROM animal WHERE id=5";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
()){
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
Blob picture = rs.getBlob(4);//得到Blob对象
//开始读⼊⽂件
InputStream in = BinaryStream();
OutputStream out = new FileOutputStream("cat.png");
byte[] buffer = new byte[1024];
int len = 0;
while((len = in.read(buffer)) != -1){
out.write(buffer, 0, len);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void insertBlob(){//插⼊Blob
Connection con = null;
PreparedStatement ps = null;
try {
con = Connection();
String sql = "INSERT INTO animal(name,age,picture) VALUES(?,?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, "TheCat");
ps.setInt(2, 8);
InputStream in = new FileInputStream("J:/test1/TomCat.png");//⽣成被插⼊⽂件的节点流 //设置Blob
ps.setBlob(3, in);
} catch (Exception e) {
e.printStackTrace();
}finally{
}
}
class JDBCTools {//JDBC⼯具类⽤来建⽴连接和释放连接
public static Connection getConnection() throws Exception{//连接数据库
String driverClass = null;
String url = null;
String user = null;
String password = null;
Properties properties = new Properties();
InputStream in = ClassLoader().getResourceAsStream("jdbc.properties"); properties.load(in);
driverClass = Property("driver");
url = Property("jdbcurl");
user = Property("user");
password = Property("password");
Class.forName(driverClass);
Connection(url, user, password);
}
public static void release(Connection con , Statement state){//关闭数据库连接
if(state != null){
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
mysql下载32位}
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void release(ResultSet rs , Connection con , Statement state){//关闭数据库连接
if(rs != null)
{
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(state != null){
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
public class Review {
public Connection getConnection() throws Exception{//连接数据库
String driverClass = null;
String url = null;
String user = null;
String password = null;
Properties properties = new Properties();
InputStream in = ClassLoader().getResourceAsStream("jdbc.properties"); properties.load(in);
driverClass = Property("driver");
url = Property("jdbcurl");
user = Property("user");
password = Property("password");
Class.forName(driverClass);
Connection(url, user, password);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论