Java实现读取证书文件内容,去掉头尾部分(-----BEGIN CERTIFICATE-----和
-----END CERTIFICATE-----`),然后将其插入到Oracle数据库的BLOB字段中。
一、实现步骤
- 读取证书文件内容:将证书文件读取为字符串,并去掉头尾的标识。
- 转换为二进制数据:将去掉头尾的字符串转换为字节数组。
- 插入到Oracle的BLOB字段:使用
PreparedStatement
将字节数组插入到Oracle数据库的BLOB字段。
二、实现代码
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class CertificateToBlob {
public static void main(String[] args) {
String filePath = "path/certificate.crt"; // 证书路径
String dbUrl = "jdbc:oracle:thin:@localhost:1521:orcl"; // 数据库URL
String dbUser = "username"; // 数据库用户名
String dbPassword = "password"; // 数据库密码
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 读取证书文件内容
String certContent = readCertificateFile(filePath);
// 去掉头尾部分
String cleanedCertContent = cleanCertificateContent(certContent);
// 将内容转换为字节数组
byte[] certBytes = cleanedCertContent.getBytes(StandardCharsets.UTF_8);
// 连接数据库并插入到BLOB字段
conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
String sql = "INSERT INTO my_table (id, blob_column) VALUES (?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 10); // ID 为 10
pstmt.setBytes(2, certBytes);
pstmt.executeUpdate();
System.out.println("Certificate inserted into BLOB field successfully.");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 读取证书文件内容为字符串
private static String readCertificateFile(String filePath) throws IOException {
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();
return new String(data, StandardCharsets.UTF_8);
}
// 去掉证书文件内容的头尾部分
private static String cleanCertificateContent(String certContent) {
// 移除头部
certContent = certContent.replaceAll("-----BEGIN CERTIFICATE-----", "");
// 移除尾部
certContent = certContent.replaceAll("-----END CERTIFICATE-----", "");
// 去除多余的换行和空白
certContent = certContent.replaceAll("\\s+", "");
return certContent;
}
}