`

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

阅读更多
源地址: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)。
2
0
分享到:
评论

相关推荐

    Java读取数据库中blob字段并插入到另一个表中

    可以从数据库中读取blob字段并插入到另一个表中,已经测试通过

    Mybatis 处理 CLOB、BLOB 类型数据

    Mybatis 处理 CLOB、BLOB 类型数据

    oracle触发器实现二维码

    本资源实现的一个用java代码实现数据二维码图片的生成,用触发器实现将生成的二维码图中转换成blob格式并插入到数据表中

    图片存入Oracle中,用clob和blob两种方式

    简单写的一个小工具,把图片存入oracle中,按clob和blob两种方式存储,并读取图片

    PRM-DUL Oracle(数据库恢复工具) v4.1.zip

    》》支持LOB字段(CLOB, NCLOB和BLOB)恢复,并支持同一个表中,不同LOB列使用不同CHUNK SIZE的情况 》》支持多种Big Endian/Little Endian操作平台(AIX/HPUX/SOLARIS/Linux/Windows)数据库数据恢复 》》支持...

    jdbc连接数据库的方式2

    三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能(系转载)。  1、在客户端软件开发中使用Thin驱动程序  在开发Java软件方面,Oracle...

    Oracle 插入超4000字节的CLOB字段的处理方法

    在通过拼组sql语句来实现数据插入的应用中,我们很有可能会遇到需要插入大型数据的情况,例如,在oracle中需要插入字节数超过4000的字段内容时,我们如果通过简单的拼组sql语句来实现插入,显然就会出现问题,而在...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    尚硅谷_佟刚_JDBC.pptx

    六年软件培训经验:曾在中国AOP全球外包排名第一的公司任Java、Oracle培训讲师、负责对公司员工新技术培训;曾任花旗银行特约JavaEE培训讲师;某部队研究所JavaEE培训;曾受聘为北航、厦门大学移动云计算专业教学...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

Global site tag (gtag.js) - Google Analytics