随着互联网的发展,CA电子签名越来普遍,需要将带有签名的pdf(或者图片格式)直接存在oracle数据库的CLOB字段中,也需要将数据库中的CLOB读取出来生成pdf(或者图片), 我们可以使用Base64对文件进行编码然后存入数据库中,而当我们需要的时候可以从数据库中读取并生成文件。
以下代码用到两个jar包,一个是oracle11g操作所需ojdbc6.jar,一个是Base64所需的包commons-codec-1.8.jar。
读取本地文件路径:C:\\Users\\Administrator\\Desktop\\12345678.jpg 生成文件存放路径D:\\path\\
package Test_Base64_Clob;
import java.sql.*;
import java.io.*;
import java.util.Date;
import java.text.SimpleDateFormat;
import org.apache.commons.codec.binary.Base64;
public class Test_Base64_Clob {
public static void main (String[] args)
{
Test_Base64_Clob ts =new Test_Base64_Clob();
//1、先建数据库表
ts.CreateTable();
//2、使用Base64对文件进行编码,生成字符串
String str=null;
ts.GetStrByFile();
//3、将Base64字符串存在CLOB对象中
ts.InsertClob(str);
//4、读取数据库的CLOB
str=ts.getClobToStr();
System.out.print("获取字符串是:"+str+"\n");
//5、将Base64的字符串解码生成文件
ts.GenerateImage(str);
}
//createTable start
//创建测试表
public void CreateTable()
{
try
{
Class.forName("oracle.jdbc.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "11";
//连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
//设置事务为手动提交
conn.setAutoCommit(false);
String name="heh";
//查询用户是否存在表
String sql = "select count(1) as num from tab where tname='TEST'";
int num=0;
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs