JDBC - 学习5 -PreparedStatement - BLOB文件上传到数据库以及下载到本地电脑
程序员文章站
2024-01-23 22:08:46
...
BLOB:Binary Long Object = 长二进制文件
注意: 我写的只是简单使用,并没有封装,你们可以自己封装,变成通用的方法
0. 表结构
1. 上传图片到数据库
@Test
public void test4() {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = ConnectionTest.getConnection5();
String sql = "insert into imgTable(name, img) values (?, ?)";
ps = conn.prepareStatement(sql);
// 将本地图片转换成 字节流文件
FileInputStream fis = new FileInputStream("C:\\Users\\lrc\\Desktop\\图片\\JS原型.png");
ps.setString(1, "JS原型图");
ps.setBlob(2, fis);
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}
ConnectionTest.closeResource(conn, ps, null);
}
运行结果
2. 下载数据库的BLOB文件到本地
@Test
public void test5() {
Connection conn = null;
PreparedStatement ps = null;
InputStream is = null;
FileOutputStream fos = null;
try {
conn = ConnectionTest.getConnection5();
ps = conn.prepareStatement("select img from imgTable where name= ?");
ps.setObject(1, "JS原型图");
ResultSet rs = ps.executeQuery();
if (rs.next()) {
// 1. 得到查找的图片的二进制对象
Blob img = rs.getBlob(1);
is = img.getBinaryStream();
// 2. 准备将1中的二进制对象,写入此到 文件输出流对象中
fos = new FileOutputStream("C:\\Users\\lrc\\Desktop\\JS原型.png");
// 3. 每次写入1024字节到文件输出流对象中
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
ConnectionTest.closeResource(conn, ps, null);
}
}
运行结果