Java 工具类实现 oracle 数据库读取blob照片后重命名保存到本地目录
时间: 2023-12-12 08:05:20 浏览: 97
你可以使用以下的 Java 工具类来实现将 Oracle 数据库中的 BLOB 类型照片读取并保存到本地目录,并重命名保存的功能:
```java
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
public class BlobImageUtil {
public static void saveBlobImageToDirectory(String url, String username, String password,
String query, String columnName, String savePath) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 建立数据库连接
connection = DriverManager.getConnection(url, username, password);
preparedStatement = connection.prepareStatement(query);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
// 获取 BLOB 字段的输入流
Blob blob = resultSet.getBlob(columnName);
InputStream inputStream = blob.getBinaryStream();
// 生成保存的文件名
String fileName = generateFileName();
// 保存到本地目录
saveBlobImage(inputStream, savePath, fileName);
// 关闭输入流
inputStream.close();
}
} catch (SQLException | IOException e) {
e.printStackTrace();
} finally {
// 关闭资源
closeResultSet(resultSet);
closeStatement(preparedStatement);
closeConnection(connection);
}
}
private static void saveBlobImage(InputStream inputStream, String savePath, String fileName) throws IOException {
FileOutputStream fileOutputStream = null;
try {
// 创建保存目录
File saveDir = new File(savePath);
if (!saveDir.exists()) {
saveDir.mkdir();
}
// 创建保存文件
File file = new File(saveDir, fileName);
fileOutputStream = new FileOutputStream(file);
// 读取输入流并写入文件
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
} finally {
// 关闭输出流
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
}
private static String generateFileName() {
// 生成唯一的文件名,可根据需求进行修改
return UUID.randomUUID().toString() + ".jpg";
}
private static void closeResultSet(ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private static void closeStatement(Statement statement) {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private static void closeConnection(Connection connection) {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
你可以使用以下代码来调用该工具类:
```java
String url = "jdbc:oracle:thin:@localhost:1521:xe"; // 数据库连接 URL
String username = "your_username"; // 数据库用户名
String password = "your_password"; // 数据库密码
String query = "SELECT image_blob FROM your_table"; // 查询语句,将 your_table 替换为你的表名和字段名
String columnName = "image_blob"; // BLOB 字段名
String savePath = "path_to_save_directory"; // 本地保存目录
BlobImageUtil.saveBlobImageToDirectory(url, username, password, query, columnName, savePath);
```
请确保替换上述代码中的相关参数以适应你的实际情况,并且提供正确的数据库连接信息和查询语句。此外,确保你的 Oracle 驱动程序已正确配置。
阅读全文