日期:2014-05-17  浏览次数:20840 次

java 生成 word 保存到 oracle 数据库
请问大家如何将一大段字符生成word文档并以二进制的方式存入oracle数据库,需要时再从oracle数据库中读出并以word方式展示,非常感谢!
------最佳解决方案--------------------
我用Mysql随便玩了下,就是把word内容存进去然后再读出来存入新文件。

/**
 * 向数据库中插入一个BLOB对象
 * @param infile   要输入的数据文件
 */
public void blobInsert(String infile) throws Exception {
FileInputStream fis = null;
try {
String sql = "insert into t_test (word) values (?)";
File f = new File(infile);
fis = new FileInputStream(f);
ps = conn.prepareStatement(sql);
ps.setBinaryStream(1,fis,fis.available());  //第二个参数为文件的内容
int resl = ps.executeUpdate();
System.out.println(resl);
} catch (Exception ex) {
System.out.println("[blobInsert error : ]" + ex.toString());
} finally {
ps.close();
fis.close();
conn.close();
}
}

/**
 * 从数据库中读出BLOB对象
 * @param outfile 输出的数据文件
 * @param id   要取的文件在数据库中的ID
 * @throws java.lang.Exception
 */
public void blobRead(String outfile, int id) throws Exception {
FileOutputStream fos = null;
InputStream is = null;
byte[] Buffer = new byte[4096];
ResultSet rs = null;
File file = null;
try {
ps = conn.prepareStatement("select word from t_test where id="+id);
rs = ps.executeQuery();
if (rs.next()) {
// 把数据库的文件显示到该目录下
file = new File(outfile);
if (!file.exists()) {
file.createNewFile(); // 如果文件不存在,则创建
}
fos = new FileOutputStream(file);
is = rs.getBinaryStream("word");
int size = 0;
//从数据库中一段一段的读出数据,-1表示读到了文件末
while ((size = is.read(Buffer)) != -1) {
fos.write(Buffer, 0, size);
}
}
} catch (Exception e) {
System.out.println("[OutPutFile error : ]" + e.getMessage());
} finally {
// 关闭用到的资源
fos.close();
rs.close();
ps.close();
conn.close();
}
}

/**
 * 生成word文档
 */
public void wordGenerate() throws IOException{
 File file=new File("d:/test.docx");
    if(!file.exists())
        file.createNewFile();
    FileOutputStream out=new FileOutputStream(file,true);        
    StringBuffer sb=null;
    for(int i=0;i<10;i++){
         sb=new StringBuffer();
         sb.append("这是第"+i+"行:测试数据");
         out.write(sb.toString().getBytes("utf-8")); 
    }