在weblogic8.14里面操作oracle大字段
2010-01-20 14:12
211 查看
1.首先说明一下:
原因是因为我在做这个项目时,被限制得太多,weblogic和oracle的版本不能变,要使用原来的版本。
因此呢。操作起来比较麻烦。而且不能更改原本工程里面的Jar包(它里面存在了oracle14.jar包,但比较旧)
weblogic版本为:8.14
oracle版本为:9i
2.在这里呢,使用hibernate,以流的形式读取到数据里面。
3.数据表呢:是一张保存文件的表
如下:
4.一个上传文件的文件对象:
UploadFileBFO:
5.在DAO里面实现:
大家可以看到这段代码
上面这段代码为了在weblogic环境里面找驱动。如果没有Oracle的JDBC驱动,那么就使用weblogic自带的驱动。
注意:
在oracle旧的版本里面写BOLB字段时,会有些限制,大小的限制,同时不能直接写进去,
一般的做法:先写一个空的BLOB进去,再进行更新。
在oracle新的版本里面并不需要这样做,它是可以直接写到数据库里面去的。
原因是因为我在做这个项目时,被限制得太多,weblogic和oracle的版本不能变,要使用原来的版本。
因此呢。操作起来比较麻烦。而且不能更改原本工程里面的Jar包(它里面存在了oracle14.jar包,但比较旧)
weblogic版本为:8.14
oracle版本为:9i
2.在这里呢,使用hibernate,以流的形式读取到数据里面。
3.数据表呢:是一张保存文件的表
如下:
CREATE TABLE T_UPLOAD_FILE ( FILE_ID VARCHAR2(60) PRIMARY KEY NOT NULL, FILE_NAME VARCHAR2(250) NOT NULL, OLD_FILE_NAME VARCHAR2(250) NOT NULL, FILE_PATH VARCHAR2(250) NOT NULL, FILE_TYPE VARCHAR2(10), FILE_SIZE LONG, STATUS CHAR(1) NOT NULL, UPLOAD_TIME TIMESTAMP, OPERATOR_ID VARCHAR2(30), FILE_CONTENT BLOB );
4.一个上传文件的文件对象:
UploadFileBFO:
private java.lang.String fileId; private java.lang.String fileName; private java.lang.String filePath; private java.lang.Long fileSize; private java.lang.String fileType; private java.lang.String oldFileName; private java.lang.String status; private java.sql.Timestamp uploadTime; private java.lang.String operatorId; private java.sql.Blob fileContent; //....get/set方法
5.在DAO里面实现:
/** * 保存文件到数据库表中 */ public boolean saveFileToDatabase(UploadFileBFO uploadFileBFO) { boolean result = true; Session s = null; byte[] buffer = new byte[1]; buffer[0] = 1; OutputStream out = null; FileInputStream fin = null; try { SessionFactory sf = this.getSessionFactory(); s = sf.openSession(); Transaction tx = s.beginTransaction(); // 获取已经保存到数据库的对象 TUploadFileBO fileBO = getById(uploadFileBFO.getFileId()); fileBO.setFileContent(Hibernate.createBlob(buffer)); s.update(fileBO); // 更新对象 s.flush(); s.refresh(fileBO, LockMode.UPGRADE); SerializableBlob sblob = (SerializableBlob) fileBO.getFileContent(); // BLOB转换 BLOB oracleBlob = null; Class clzWeblogicOracleThinBlob = null; try { clzWeblogicOracleThinBlob = Class .forName("weblogic.jdbc.vendor.oracle.OracleThinBlob"); Method method = clzWeblogicOracleThinBlob.getDeclaredMethod( "getBinaryOutputStream", new Class[] {}); Object value = method.invoke(sblob.getWrappedBlob(), new Object[] {}); out = (OutputStream) value; } catch (ClassNotFoundException e) { log .warn( "加载WebLogic的Oracle数据库JDBC驱动程序失败:weblogic.jdbc.vendor.oracle.OracleThinBlob", e); log.debug("使用Oracle数据库JDBC驱动程序。"); oracleBlob = (BLOB) sblob.getWrappedBlob(); out = oracleBlob.getBinaryOutputStream(); } String fileName = fileBO.getFilePath() + "/" + fileBO.getFileName(); File f = FileUtils.getFileByPath(fileName); if (f == null) { log.error("无法读取文件。"); result = false; return result; } fin = new FileInputStream(f); byte[] b = new byte[FILE_BUFFER]; int len = 0; while ((len = fin.read(b)) != -1) { out.write(b, 0, len); } // 依次关闭(注意顺序) fin.close(); out.flush(); out.close(); s.flush(); // 提交session tx.commit(); // 提交事务 } catch (Exception e) { log.error("保存文件到数据库时发生异常", e); result = false; } finally { if (s != null) { try { s.close(); } catch (Exception e) { log.error("关闭Hibernate Session失败.", e); result = false; } } if (out != null) { try { out.close(); } catch (IOException e) { log.error("关闭文件输出流失败.", e); result = false; } } if (fin != null) { try { fin.close(); } catch (IOException e) { log.error("关闭输入流失败.", e); result = false; } } } return result; }
大家可以看到这段代码
Class clzWeblogicOracleThinBlob = null; try { clzWeblogicOracleThinBlob = Class .forName("weblogic.jdbc.vendor.oracle.OracleThinBlob"); Method method = clzWeblogicOracleThinBlob.getDeclaredMethod( "getBinaryOutputStream", new Class[] {}); Object value = method.invoke(sblob.getWrappedBlob(), new Object[] {}); out = (OutputStream) value; } catch (ClassNotFoundException e) { log .warn( "加载WebLogic的Oracle数据库JDBC驱动程序失败:weblogic.jdbc.vendor.oracle.OracleThinBlob", e); log.debug("使用Oracle数据库JDBC驱动程序。"); oracleBlob = (BLOB) sblob.getWrappedBlob(); out = oracleBlob.getBinaryOutputStream(); }
上面这段代码为了在weblogic环境里面找驱动。如果没有Oracle的JDBC驱动,那么就使用weblogic自带的驱动。
注意:
在oracle旧的版本里面写BOLB字段时,会有些限制,大小的限制,同时不能直接写进去,
一般的做法:先写一个空的BLOB进去,再进行更新。
在oracle新的版本里面并不需要这样做,它是可以直接写到数据库里面去的。
相关文章推荐
- 如何利用.net操作oracle里面的clob字段
- Oracle-表的字段增加修改删除操作
- 关于ORACLE当中关于含有关键字作为字段的操作=查询,插入等=规范的双引号操作
- ORA-00001: unique constraint pk_****_key violated oracle imp 语句导入数据对oracle的数据字段操作顺序
- J2EE操作Oracle的clob类型字段
- Oracle:SQL语句--对表的操作——添加一个字段 (即 添加 一列)
- hibernate在SSH框架操作ORACLE Clob字段类型的读写改
- 如何用SQL操作oracle的blob字段里的字符串数据!
- Oracle long raw字段操作 oledb方式 asp.net
- Oracle 对字段操作
- 用Hibernate操作Oracle Clob字段(转)
- oracle 在操作blob该字段是否会产生很多redo
- oracle 中 对大数据量 字段进行update操作
- JDBC和Hibernate操作Oracle中的Blob字段的小结
- .net操作oracle里面的blob,clob
- ibatis操作oracle的clob字段和blob字段
- oracle,mysql,sqlserver--java对日期字段的操作
- jdbc 读取oracle long raw 字段,里面存的是文本
- oracle 日期类型字段的操作(转)
- ORACLE 操作 CLOB 字段