java 读取blob类型存成.doc操作!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 读取blob类型存成.doc操作!!相关的知识,希望对你有一定的参考价值。

写了一个类,是读取content表中attach(blob类型)列的值。然后存储成.doc文件。现在报错 ,高手帮忙给看看呗!!!
package fd;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import oracle.sql.*;

public class Test

Connection con = null;
Statement stmt = null;
ResultSet rs = null;

private ResultSet getResultSet()
try Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@18.18.18.21:1521:oradb";
String user = "tjxt";
String password = "tjxt";
con = DriverManager.getConnection(url, user, password);
stmt = con.createStatement();
String sql = "select attach from content where indexno='XXXXX-1001-2009-00001'";
rs = stmt.executeQuery(sql);
catch (Exception e)
e.printStackTrace();

return rs;


public void InputDoc()
Test temp = new Test();
ResultSet rset = temp.getResultSet();
try
while (rset.next())
oracle.sql.BLOB blob = (oracle.sql.BLOB) rset.getBlob("attach");
File f = new File("f:\\test\\1.doc");
FileOutputStream fos = new FileOutputStream(f);
InputStream is = blob.getBinaryStream();// 读出数据后转换为二进制流
byte[] data = new byte[1024];
while (is.read(data) != -1)
fos.write(data);

fos.close();
is.close();

con.commit(); //正式提交
rset.close();

catch (Exception e)




public static void main(String[] args)
Test temp = new Test();
temp.InputDoc();



找了下原因
FileOutputStream fos = new FileOutputStream(f);
没有执行!!
求解!!!

这个地方加个判断
con.commit(); //正式提交
rset.close();
改成:
if (con != null)
con.commit(); // 正式提交
rset.close();

还有:
File f = new File("f:\\test\\1.doc");
后面加一句
if (!f.exists())
f.mkdir();

另外建议你操作完成后把该关闭的都关闭 比如con.close();
stmt.close();等等

补充:
我这边的测试已经成功,可以写入文件。
你把这个路径“f:\\test\\1.doc”手动建出来,然后试试,不行的话我再帮你查找原因
参考技术A while ((int len = is.read(data)) != -1)
fos.write(data,len);
参考技术B 报的什么错啊?
Blob正确读出来了吗?
感觉这么写好像读不出来似的。

jdbc获取blob类型乱码

一、使用场景:

  mysql数据库字段类型为longblob,在数据库里看中文字符正常,java读取字串的时候发现中文乱码

  使用到了activeMq

 

二、排查:  

  (1)修改eclipse的环境编码为utf-8

  (2)怀疑是mq读取转码,修改mq的配置文件,指定字符集编码

 

三、解决:

  longblob是二进制类型的,当修改表字段类型为字符类型【longtext】后中文字符正常显示

以上是关于java 读取blob类型存成.doc操作!!的主要内容,如果未能解决你的问题,请参考以下文章

java 关于blob类型问题

Oracle中存储图片的类型为BLOB类型,Java中如何将其读取并转为字符串?

如何读取存储在 sqlite 数据库中的 blob 类型?

如何在java中读取oracle blob

什么java类型可以写入BLOB类型中

java oracle数据blob的操作