JDBC-向数据库中存入读取图片
注:此代码依赖自定义的数据库连接工具类
1.向数据库存入一张照片
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class BlobTest01 {
public static void main(String[] args) throws Exception {
/**
* 向photo中插入一条数据
*/
//1.连接数据库
Connection con = JDBCUtils.getConnection();
//2.预编译sql语句
String sql = "insert into photo(name,phoFile) values (?,?)";
PreparedStatement ps = con.prepareStatement(sql);
//3.填充占位符
ps.setString(1, "cat");
File file = new File("D:\\testdir\\server\\cat.jpg");
FileInputStream fis = new FileInputStream(file);
ps.setBlob(2, fis);
//4.执行sql
ps.execute();
//5.关闭资源
JDBCUtils.closeConnection(con, ps);
}
}
2.从数据库中读取照片并存到本地文件夹中
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BlobTest02 {
/**
* 从数据库中读取照片存储到本地
*/
public static void main(String[] args) throws Exception {
//1.连接数据库
Connection con = JDBCUtils.getConnection();
//2.预编译sql语句
String sql = "select `id`,`name`,`phoFile` from photo where name = ?";
PreparedStatement ps = con.prepareStatement(sql);
//3.填充占位符
ps.setString(1, "cat");
//4.执行sql
ResultSet rs = ps.executeQuery();
if (rs.next()){
int id = rs.getInt(1);
String name = rs.getString(2);
Blob photo = rs.getBlob(3);
File file = new File("D:\\testdir\\catpho.jpg");
InputStream fis = photo.getBinaryStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len = fis.read(buffer);
while (len != -1){
fos.write(buffer, 0, len);
len = fis.read(buffer);
}
//5.关闭资源
fis.close();
fos.close();
}
JDBCUtils.closeConnection(con, ps, rs);
}
}