BLOB是一个二进制大对象,是一个大文件,可以是图片文件,声音文件等
建立一张表:
create table myblob(
id int primary key,
big_bit blob
)charset utf8;
写入:
1注册驱动
2建立连接
3创建语句和预处理
String sql = "insert into myblob(id,big_bit) values(1,?)";
ps = conn.prepareStatement(sql);
4构造字节流读取对象
我们处理字符流读取的时候用的是Reader对象
而我们现在处理字节流,在java,io中,应该是用InputStream对象
File file = new File("3f8a5220f08b05fe9a3de5af50c3c225.jpg");
InputStream in = new BufferedInputStream(new FileInputStream(file));
ps.setBinaryStream(1, in,(int)file.length());
File -> FileInputStream -> BufferedInputStream -> InputStream
输入流放入语句。
5执行查询并返回结果int i = ps.executeUpdate();
本来报错:出现乱码,肯定是编码问题,把所有的数据库所有的编码方式和表的编码方式和java程序端的编码方式都设置为utf8以后解决问题。
utf8不容易出问题。
1 注册驱动
2 建立连接
3创建语句
4执行 语句并返回结果‘
rs = st.executeQuery("select big_bit from myblob");
5IO 与 处理数据
while(rs.next())
{
InputStream in = rs.getBinaryStream("big_bit");
File file = new File("3f8a5220f08b05fe9a3de5af50c3c225_bak.jpg");
OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
byte[] buff = new byte[1024];
for(int i=0;(i=in.read(buff)) >0;)
{
out.write(buff,0,i);
}
out.close();
in.close();
}
rs(blob) -> InputStream(语句返回结果放入输入流)
File -> FIleOutputStream -> BufferedOutputStream -> OutputStream
建立字节流缓冲区byte[]
InputStream---->byte[] -----> OutputStream
6释放资源