package test;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
private Connection conn;
/**
* 得到一个数据库的连接
*
* @return 返加Connection对象
*/
public Connection getConnection() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:lyx", "scott", "tiger");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 向表中插入图片
*
* @param path图片所在的路径
* @return 整形 判断成功或失败
*/
public int insertImage(String path) throws Exception {
int i = 0;
Statement st = null;
ResultSet rs = null;
conn=this.getConnection();
conn.setAutoCommit(false);//设置数据库为不自动提交,必须的一步
st = conn.createStatement();
//先插入一个空对象,这里我调用了Empty_BLOB()函数
i = st.executeUpdate("insert into image (id,image) values (seq1.nextval,Empty_BLOB())");
//以行的方式锁定
rs = st.executeQuery("select image from image where id=(select max(id) from image) for update");
if (rs.next()) {
//得到流
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);
//从得到的低级流构造一个高级流
PrintStream ps = new PrintStream(blob.getBinaryOutputStream());
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(path));
byte[] buff = new byte[1024];
int n = 0;
//从输入到输出
while ((n = bis.read(buff)) != -1) {
ps.write(buff, 0, n);
}
//清空流的缓存
ps.flush();
//关闭流,注意一定要关
ps.close();
bis.close();
}
rs.close();
st.close();
conn.close();
return i;
}
public static void main(String[] args) throws Exception {
Test test=new Test();
test.insertImage("e:\\3.jpg");
System.out.println("OK");
}
}
分享到:
相关推荐
通过上述步骤,你就能在JDBC4.0环境中有效地使用Oracle数据库来存储和检索BLOB类型的数据。这种方法对于处理大量二进制数据的应用程序非常有用,如图片存储服务或文档管理系统。记得在开发过程中,定期测试和优化...
在Oracle数据库中,BLOB类型的字段具有特殊的处理方式,尤其在使用JDBC(Java Database Connectivity)和Hibernate框架时,需要特别注意其写入过程。以下是对“JDBC+Hibernate将Blob数据写入Oracle”这一主题的深入...
总结来说,无论是通过JDBC还是Hibernate,写入Oracle数据库的Blob字段都需要先创建一个空Blob,然后获取其cursor,最后将二进制数据写入Blob。在JDBC中,这个过程涉及多个SQL语句和流操作;而在Hibernate中,通过ORM...
本文将深入探讨如何使用Java Database Connectivity (JDBC) API来操作Oracle数据库中的BLOB字段,包括创建表、插入和读取BLOB数据的方法。 #### 创建包含BLOB字段的表 在Oracle数据库中创建一个包含BLOB字段的表...
本篇文章将深入讲解如何使用JDBC4.0与Oracle数据库交互,涉及的主要知识点包括JDBC连接、序列的使用、BLOB对象的操作以及文件的读写。 首先,确保你已添加了Oracle JDBC驱动ojdbc6.jar到项目的类路径中。这个jar包...
在处理Oracle BLOB数据时,可以利用JDK提供的`ResultSet`类中的`getBlob()`方法和`PreparedStatement`类中的`setBlob()`方法来实现对BLOB类型的读取和写入操作。具体步骤如下: 1. **读取BLOB数据**:通过`...
本文将详细介绍如何在Oracle数据库中实现Blob字段的上传和下载操作。 #### 二、Blob字段上传 Blob字段的上传通常涉及到以下几个步骤: 1. **创建Blob字段:** 首先需要在数据库表中定义一个Blob类型的字段。 2. **...
Java对Oracle数据库中BLOB字段的处理涉及多个层面,包括读取、写入、更新以及跨数据库操作等。 ### Java处理Oracle BLOB字段的基本方法 #### 1. 读取BLOB字段 在Java中,读取Oracle数据库中的BLOB字段通常通过`...
本篇将详细介绍如何使用JDBC(Java Database Connectivity)与Hibernate框架来操作Oracle数据库中的BLOB字段。 首先,Oracle数据库的BLOB字段提供了对大对象的高效存储,它的性能优于LONG字段,尤其适合存储大容量...
MySQL和Oracle都是广泛使用的数据库管理系统,它们都支持Blob类型的字段来存储这类数据。本篇文章将深入探讨如何在MySQL和Oracle数据库中插入Blob数据,并提供相关的源码实例。 一、MySQL中的Blob数据插入 MySQL...
在JDBC(Java Database Connectivity)中,我们可以使用特定的方法来操作这些类型的数据。 首先,我们需要建立与数据库的连接。在示例代码中,`JDBCUtils.getConnection()` 方法用于获取数据库连接。这个方法通常会...
### Oracle中BLOB字段的读取与操作 #### 一、引言 在数据库系统中,BLOB(Binary Large Object)是一种用于存储大量二进制数据的数据类型,例如图像、音频或视频文件等。在Oracle数据库中,BLOB类型特别适用于处理...
在上面的代码中,我们使用JDBC连接数据库,并执行INSERT、SELECT和UPDATE语句来操作BLOB对象。 BLOB数据类型 BLOB是一种二进制大对象,是数据库中的一种数据类型,用于存储大规模的二进制数据,如图片、音频、...
因此,如果使用此版本的 JDBC 驱动,需要通过扩展 API 来实现 Blob 的写入功能。 - **JDBC 3.0**:正式引入了 Blob 数据的写入支持,使得数据的增删改查操作更为完整。 #### 三、容器环境的影响 - **WebLogic 容器*...
在 SQL 查询中,你可以使用 `SELECT BLOB_COLUMN FROM TABLE` 来读取 BLOB 数据,并通过 PL/SQL 包如 `UTL_FILE` 或 `DBMS_LOB` 来进行写入和更新。`DBMS_LOB` 提供了一系列的子程序,如 `DBMS_LOB.CREATETEMPORARY`...
在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...
你可以使用`ResultSet`和`CallableStatement`来查询BLOB数据并将其写入文件: ```java String selectSql = "SELECT FILE_CONTENT FROM MP3_STORAGE WHERE ID = ?"; try (PreparedStatement pstmt = conn.prepare...