使用Java向Oracle数据库的BLOB数据列中插入数据

源地址:[url]http://www.v5cn.cn[/url]
向Oracle数据库的大对象lob字段中插入数据的步骤

public int insertFileInfo(Eg_attachsfiles attachsfile,File file) {
/*
* 向Orcale数据库的BLOB数据列插入数据的操作分一下几步
* 在操作这几步之前需要注意的是:关闭SQL语句的自动提交,也就是conn.setAutoCommit(false);
* 等操作完成后手动conn.commit();
*/
int result = 0;
if(attachsfile!=null){
/*
* 第一步:
* 创建SQL语句,需要注意的是BLOB数据类型的那一列应先插入空BLOB数据,用于插入的函数是
* empty_BLOB();
*/
String sql = "insert into eg_attachsfiles(FILE_NAME,FILE_SIZE,FILE_TYPE,CONTENT,FILE_SAVE,APPLYMATTERSNO) values('"+attachsfile.getFileName()+"',"+attachsfile.getFileSize()+",'"+attachsfile.getFileType()+"',EMPTY_BLOB(),'"+attachsfile.getFileSave()+"',"+attachsfile.getApplymattersNo()+")";
if(attachsfile.getMemo()!=null && !"".equals(attachsfile.getMemo())){
sql = "insert into eg_attachsfiles(FILE_NAME,FILE_SIZE,FILE_TYPE,CONTENT,FILE_SAVE,MEMO,APPLYMATTERSNO) values('"+attachsfile.getFileName()+"',"+attachsfile.getFileSize()+",'"+attachsfile.getFileType()+"',EMPTY_BLOB(),'"+attachsfile.getFileSave()+"','"+attachsfile.getMemo()+"',"+attachsfile.getApplymattersNo()+")";
}
/*
* 第二步:
* 创建查询语句,查询刚才插入的那条数据的BLOB列表在查询语句的结尾必须添加for update
* 从而锁定要查询的列
*/
String searchSql = "Select CONTENT From eg_attachsfiles where ID=(Select max(ID) From eg_attachsfiles) for update";

OutputStream outStream = null;
InputStream fin = null;
try {
//执行新增
result = this.executeUpdate(sql, null);
//执行查询
this.res = this.executeQuery(searchSql, null);
if(res.next()){
//使用getBlob(1)java中的Blob对象
java.sql.Blob b = res.getBlob(1);
//将java中的Blob对象转换重Oracle中的BLOB对象
oracle.sql.BLOB blob = (oracle.sql.BLOB) b;
//使用BLOB对象的getBinaryOutputStream()创建输出流对象
outStream = blob.getBinaryOutputStream();
//使用传进来的Flie对象创建输入流对象
fin = new FileInputStream(file);
//创建缓存
byte[] buff = new byte[(int)file.length()];
int index = 0;
//循环读取数据并把数据写入输出流中
while((index=fin.read(buff))!=-1){
outStream.write(buff);
}
}
} catch (Exception e) {
logger.info("把上传的文件写数据库当中时异常,异常发生在com.future.pubnet.dao.impl.Eg_attachsfilesDaoImpl类的insertFileInfo(Eg_attachsfiles attachsfile)方法,异常信息"+e.getMessage(),e.fillInStackTrace());
new PubnetException(e.getMessage(),e);
}finally{
try {
//关闭流对象
outStream.close();
fin.close();
} catch (IOException e) {
logger.info("关闭流对象异常,异常发生在com.future.pubnet.dao.impl.Eg_attachsfilesDaoImpl类的insertFileInfo(Eg_attachsfiles attachsfile)方法,异常信息"+e.getMessage(),e.fillInStackTrace());
new PubnetException(e.getMessage(),e);
}
this.closeRes();
this.closePstmt();
}
}
return result;
}

[color=red]
注意:如果你使用JNDI连接数据库时就需要把发布到服务器中的classes12.jar删掉,因为
使用JNDI连接池时服务器本身已经复制进去一个classes12.jar,如果不删除两个jar文件会有冲突,项目报类转换异常(ClassCaseException)。
[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值