源地址:
http://www.v5cn.cn
向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;
}
注意:如果你使用JNDI连接数据库时就需要把发布到服务器中的classes12.jar删掉,因为
使用JNDI连接池时服务器本身已经复制进去一个classes12.jar,如果不删除两个jar文件会有冲突,项目报类转换异常(ClassCaseException)。
分享到:
相关推荐
在IT领域,尤其是在Java开发与Oracle数据库交互的过程中,处理BLOB(Binary Large Object)类型字段是一项常见且重要的任务。BLOB字段主要用于存储大量的二进制数据,如图像、音频、视频或任何其他非文本格式的数据...
本文将详细介绍如何在Java应用程序中读取存储在Oracle数据库BLOB字段中的图片数据。 #### 二、准备工作 为了实现读取Oracle数据库中的BLOB字段存储的图片,我们需要进行以下准备: 1. **环境搭建**: - Oracle...
可以从数据库中读取blob字段并插入到另一个表中,已经测试通过
1. **查询BLOB数据**:使用SQL查询语句从Oracle数据库中选择含有BLOB字段的照片记录。例如: ```sql SELECT photo_blob FROM photos WHERE id = ; ``` 这里`photo_blob`是BLOB类型的列,`<photo_id>`是你想获取...
在ORACLE数据库中插入大字段数据时,可能会遇到性能问题或者由于字段长度限制导致的错误。这类问题通常涉及LOB(Large Object)类型的字段,如CLOB(Character Large Object)和BLOB(Binary Large Object)。本篇...
本篇文章将深入探讨如何在MySQL和Oracle数据库中插入Blob数据,并提供相关的源码实例。 一、MySQL中的Blob数据插入 MySQL提供了多种方式插入Blob数据,包括使用PreparedStatement接口。以下是一个Java源码示例: ...
在Java编程中,有时我们需要将图像数据存储到数据库中,然后能够从数据库中读取出来。这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片...
示例中使用的数据库为Oracle数据库。 ##### 2.1 保存图片到数据库 ```java public void savePic(InputStream is) { String insertSql = "insert into pic(id, pic) values(1, empty_blob())"; // 首先插入一个空...
本文将深入探讨如何使用Java Database Connectivity (JDBC) API来操作Oracle数据库中的BLOB字段,包括创建表、插入和读取BLOB数据的方法。 #### 创建包含BLOB字段的表 在Oracle数据库中创建一个包含BLOB字段的表...
本篇将详细介绍如何使用Java将MP3等二进制文件存入Oracle数据库中的BLOB字段。 首先,我们需要了解Oracle JDBC驱动,这是Java与Oracle数据库交互的基础。Oracle提供了一个名为ojdbc的JDBC驱动,它可以连接到Oracle...
在Java编程中,Blob(Binary Large Object)是用于存储大量二进制数据的数据类型,常被用在数据库中保存图片、文件等非文本信息。本教程将深入探讨如何使用Java进行Blob字段的操作,以实现将图片或文件保存到数据库...
以上就是使用Java操作Oracle数据库中CLOB和BLOB数据的基本方法。在实际应用中,你可能需要考虑事务管理、错误处理、性能优化等因素。记住,始终关闭数据库连接和流资源,以防止资源泄漏。同时,对于大型对象,处理时...
本话题聚焦于如何批量导入图片到Oracle数据库,这是一种常见的需求,特别是在处理大量图像数据的项目中。Oracle数据库作为一款强大的关系型数据库管理系统,支持多种类型的数据存储,包括BLOB(Binary Large Object...
在Java的JDBC4.0版本中,Oracle数据库的BLOB类型数据操作变得更加方便。BLOB(Binary Large Object)是用来存储大对象,如图像、音频或视频文件等二进制数据的数据库字段类型。以下是对使用JDBC4.0操作Oracle中BLOB...
5. **数据库操作**:在数据库中插入和检索Blob类型的字段,通常需要使用SQL语句或者ORM框架。例如,使用Java的JDBC API,可以创建PreparedStatement来执行INSERT语句,然后使用OutputStream将BASE64解码后的字节数组...
下面将详细介绍这两种数据类型以及如何在Oracle中使用它们存储和读取图片。 1. **CLOB数据类型**: `CLOB`数据类型用于存储大量的字符数据,最大可达到4GB。虽然主要用于存储文本,但在本例中,由于图片可以被转换...
更新BLOB数据的过程与插入类似,只是在UPDATE语句中使用setBlob()方法: ```java File updatedImageFile = new File("updatedImage.jpg"); FileInputStream updatedFis = new FileInputStream(updatedImageFile); ...
本示例主要讲解如何在Oracle数据库中操作Blob类型的数据,包括插入和取出。 首先,我们需要理解Oracle数据库对Blob类型的处理。Blob是Oracle中的一个大对象数据类型,它可以存储最多4GB的二进制数据。Blob数据可以...
在 Oracle 数据库中,BLOB 类型对应的数据库类型是 BLOB,在 MySQL 中对应的类型是 BLOB。 MyBatis 提供了对 CLOB 和 BLOB 类型的内置支持,通过将 CLOB 类型映射到 Java 的 String 类型,BLOB 类型映射到 byte[] ...
在Java程序中使用Oracle数据库之前,需要加载Oracle JDBC驱动。这一步通常是通过`Class.forName()`方法完成的。 ```java Class.forName("oracle.jdbc.driver.OracleDriver"); ``` ##### 3.2 建立数据库连接 使用`...