Struts操作Oracle数据库:JDBC实现Blob字段存取

5星 · 超过95%的资源 需积分: 4 20 下载量 192 浏览量 更新于2024-10-03 收藏 6KB TXT 举报
"这篇资源主要介绍了如何在Struts框架下使用JDBC操作Oracle数据库的Blob字段,用于存储和检索大对象数据。提供了实用的方法,并且包含详细的注释。" 在Java Web开发中,Struts是一个常用的MVC框架,而Oracle数据库则常常用于存储大量数据,包括大对象(LOB)如图片、视频等。Blob类型用于存储二进制大数据。这篇内容详细阐述了如何在Struts中通过JDBC与Oracle数据库交互,处理Blob字段。 首先,创建Oracle数据库表`cbh`,包含两个字段:`name`(varchar2类型,为主键且不允许为空)和`context`(Blob类型,用于存储大对象)。创建表的SQL语句如下: ```sql CREATE TABLE cbh ( name VARCHAR2(20) PRIMARY KEY NOT NULL, context BLOB ); ``` 为了在Struts应用中操作这个表,我们需要编写一个工具类,包含两个核心方法:`addFile`用于保存文件到Blob字段,`restoreFile`用于从Blob字段读取文件并输出到OutputStream。 `addFile`方法接收文件名(fileName)和文件输入流(InputStream),步骤如下: 1. 获取数据库连接(ConnectionFactory.getConnection())。 2. 关闭自动提交,以进行事务控制(con.setAutoCommit(false))。 3. 创建预编译的SQL语句(PreparedStatement),用于插入文件名和一个空的Blob值("insert into cbh(filename, contexts) VALUES (?, empty_blob())")。 4. 执行插入操作,关闭PreparedStatement。 5. 预编译一个新的SQL语句,用于选择刚插入的记录并锁定它("select contexts from cbh WHERE filename=? for update")。 6. 执行查询,获取结果集,如果存在记录,则获取Blob对象。 7. 使用Blob对象的`setBinaryStream`方法获取OutputStream,然后通过BufferedInputStream和BufferedOutputStream将输入流的数据写入Blob。 `restoreFile`方法接收文件名和OutputStream,用于读取Blob内容并写入OutputStream。大致流程是: 1. 获取数据库连接,创建PreparedStatement,选择对应文件名的Blob记录。 2. 执行查询,获取结果集,如果存在记录,获取Blob对象。 3. 使用Blob对象的`getBinaryStream`方法获取InputStream,通过BufferedInputStream和BufferedOutputStream将Blob内容读取出来并写入指定的OutputStream。 通过这种方式,Struts应用可以方便地在Oracle数据库中存储和检索大文件,确保了数据的完整性和一致性。这个方法对于处理如用户上传的文件等大数据量的场景非常实用。由于有详细的注释,开发者可以更容易地理解和应用这些代码。