BLOB字段的写入
数据库执行脚本:
create table bxxx( id int primary key , image blob );
方法一:(JDBC2.0 规范)
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class BlobDemo01 { public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL"; public static final String DBUSER = "scott"; public static final String DBPASSWORD = "tiger"; public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; String sql = "insert into bxxx values(?,?)"; File f = new File("d:"+File.separator+"5586.jpg"); InputStream in = null; try { in = new FileInputStream(f); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { Class.forName(DBDRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); conn.setAutoCommit(false); pstmt = conn.prepareStatement(sql); pstmt.setInt(1,1); pstmt.setBinaryStream(2,in,(int)f.length()); if(pstmt.executeUpdate()>0){ System.out.println("OK"); conn.commit(); conn.setAutoCommit(true); } } catch (Exception e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally{ try { in.close(); pstmt.close(); conn.close(); } catch (IOException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } }
方法二:(古老)
1. 设置不自动提交
2.插入一个空的blob
3.使用行级锁定blob字段
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.PrintStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import oracle.sql.BLOB; public class BlobDemo02 { public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL"; public static final String DBUSER = "scott"; public static final String DBPASSWORD = "tiger"; public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql1 = "insert into bxxx values(1,empty_blob())"; String sql2 = "select image from bxxx where id = 1 for update"; File f = new File("d:"+File.separator+"5586.jpg"); try { Class.forName(DBDRIVER); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); conn.setAutoCommit(false); pstmt = conn.prepareStatement(sql1); pstmt.executeUpdate(); pstmt = conn.prepareStatement(sql2); rs = pstmt.executeQuery(); while(rs.next()){ oracle.sql.BLOB blob = (BLOB) rs.getBlob(1); PrintStream out = new PrintStream(blob.getBinaryOutputStream()); BufferedInputStream in = null; in = new BufferedInputStream(new FileInputStream(f)); byte[] b = new byte[512]; int temp = 0; while((temp=in.read(b))!=-1){ out.write(b,0,temp); } out.flush(); in.close(); out.close(); conn.commit(); conn.setAutoCommit(true); } } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close(); pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } System.out.println("OK!"); } }
相关推荐
Java对Oracle数据库中BLOB字段的处理涉及多个层面,包括读取、写入、更新以及跨数据库操作等。 ### Java处理Oracle BLOB字段的基本方法 #### 1. 读取BLOB字段 在Java中,读取Oracle数据库中的BLOB字段通常通过`...
在Java应用程序中读取Oracle数据库中的BLOB字段通常涉及到几个步骤:建立数据库连接、执行查询语句、获取结果集并从中提取BLOB数据,最后将这些数据写入到文件中。 ##### 3.1 加载Oracle驱动 在Java程序中使用...
本文将详细介绍如何在Java应用程序中读取存储在Oracle数据库BLOB字段中的图片数据。 #### 二、准备工作 为了实现读取Oracle数据库中的BLOB字段存储的图片,我们需要进行以下准备: 1. **环境搭建**: - Oracle...
本文将详细介绍如何使用Struts结合JDBC操作Oracle数据库中的Blob字段实现文件的保存和读取。 #### 代码分析 根据提供的部分代码示例,我们可以将其分为两个主要部分:文件保存和文件读取。 ##### 文件保存 文件...
3. **写入文件内容:** 将文件内容写入到Blob字段中。 ##### 示例代码(上传部分): ```java public static void uploadBlob(Connection cn, MmsNewsVO evo) throws Exception { // 获取元素主键 String medpk =...
在Java的JDBC4.0版本中,Oracle数据库的BLOB类型数据操作变得更加方便。BLOB(Binary Large Object)是用来存储大对象,如图像、音频或视频文件等二进制数据的数据库字段类型。以下是对使用JDBC4.0操作Oracle中BLOB...
在Oracle中存储和读取图片数据时,可以使用PreparedStatement对象的`setBlob()`方法将图像数据写入BLOB字段,而`getBlob()`方法用于读取BLOB字段中的数据。此外,为了提高性能,可能需要关闭自动提交模式(`conn....
### JDBC中如何处理Oracle BLOB字段 在Java开发过程中,特别是在使用JDBC(Java Database Connectivity)与Oracle数据库交互时,处理BLOB(Binary Large Object)类型的数据是一项常见的需求。BLOB通常用于存储大量的...
总结来说,无论是通过JDBC还是Hibernate,写入Oracle数据库的Blob字段都需要先创建一个空Blob,然后获取其cursor,最后将二进制数据写入Blob。在JDBC中,这个过程涉及多个SQL语句和流操作;而在Hibernate中,通过ORM...
本篇将详细介绍如何使用JDBC(Java Database Connectivity)与Hibernate框架来操作Oracle数据库中的BLOB字段。 首先,Oracle数据库的BLOB字段提供了对大对象的高效存储,它的性能优于LONG字段,尤其适合存储大容量...
在Oracle数据库存储超大文件时、以流的方式分段读取和保存,避免内存溢出。本工具类提供两个方法: 1、读取文件保存到Oracle数据库Blob字段(支持超大文件) 2、从数据库中读出大字段到文件中(分块读取)
JDBC读写Oracle的CLOB字段
本教程将详细讲解如何使用JSP与Oracle数据库配合,实现向BLOB字段上传附件的功能。 首先,我们需要准备环境:一个配置了Oracle数据库的服务器,JDBC驱动程序(Oracle JDBC driver,如ojdbc)以连接数据库,以及一个...
在Java中,当我们需要通过JDBC(Java Database Connectivity)接口与Oracle数据库交互时,处理CLOB字段可能会遇到一些挑战。这篇文档将详细阐述如何在JDBC中有效地读取和操作Oracle数据库的CLOB字段,并将其转换为...
### 通过JDBC连接Oracle数据库的十大技巧 在IT领域,使用Java开发应用程序时,与数据库的交互是一项基本且重要的任务。JDBC(Java Database Connectivity)作为一种标准接口,提供了多种方式来实现Java程序与数据库...
在IT领域,尤其是在数据库...总之,无论是使用JDBC还是Hibernate,正确处理Oracle中的BLOB字段都是至关重要的,尤其是在处理大量二进制数据的应用场景下。掌握上述流程和技巧,能够有效提升数据操作的效率和安全性。
在实际操作中,可以通过Hibernate实现Oracle数据库中BLOB数据的存储和删除操作,然后利用Struts2框架展示这些BLOB数据。这样的结合,不仅可以提高开发效率,还能保证应用的性能和稳定性。 ### 实际操作步骤 在实际...