mysql存图片
可用Blob对象表示图片,将Blob插入到数据库时 利用PrepareStatement对象的setBinaryStream方法,实现将Blob数据保存到数据库中
mysql取图片(写出到文件夹)
调用查询结构集的getBlob方法,获取数据库里的Blob对象,通过Blob对象的getBinaryStream方法获取输入流,便可以写出到文件中了
数据库表结构如下:
代码如下:
package _3;
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.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class P611
{
public static void main(String[] args) throws IOException
{
try
{
//1、加载驱动类
Class.forName("com.mysql.jdbc.Driver");
//2、建立连接 建立连接很耗时间 因为连接内部其实包含了Socket对象,是一个远程的连接。比较耗时。
//后期使用连接池连接
Connection conn=
DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?characterEncoding=UTF-8","root","123456");
//-----------------------------------------1、将图片插入到数据库中-----------------------------------------
//需要存到mysql的图片,使用相对路径,即把图片放在此java项目的文件夹下
File image=new File("image.png");
//获取图片的文件输入流
InputStream is=new FileInputStream(image);
//创建预编译的statement对象
PreparedStatement insert=
conn.prepareStatement("insert into img_table values(null,?,?)",Statement.RETURN_GENERATED_KEYS);
//下面三行执行插入操作
insert.setString(1, "一张图片");
insert.setBinaryStream(2, is, (int)image.length());
int affect=insert.executeUpdate();
//如果插入图片成功
if (affect==1)
{
System.out.println("图片加入成功");
}
//--------------------------------2、将刚插入到数据库的图片,用文件输出流写回到文件夹----------------------
//查询id=1的图片
PreparedStatement query=
conn.prepareStatement("select * from img_table where img_id=?");
query.setInt(1, 1);
ResultSet re=query.executeQuery();
//把记录指针移到第一行数据(也是唯一的一行)
re.next();
//使用Blob对象接收数据库里的图片
java.sql.Blob imgBlob=re.getBlob(3);
//获取Blob对象的二进制流;
InputStream imgInS=imgBlob.getBinaryStream();
//文件输出流
OutputStream imgOuS=new FileOutputStream(new File("test.png"));
//下面就把图片写出到文件夹里面啦
byte[] buffer=new byte[1024];
int len;
while( (len=imgInS.read(buffer))!=-1 )
{
imgOuS.write(buffer, 0, len);
}//图片写出完毕
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
}