`

用java 对 oracle 中的 image 存取

阅读更多

package data;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class BlobTest {

 public void insertBlob(String imageId, String fileName) {
   Connection conn = null;
   try {
     conn = getConnection();
     if (!fileName.equals("")) {
       PreparedStatement ps = conn.prepareStatement("INSERT INTO IMAGES VALUES(?, ?)");
       ps.setString(1, imageId);
       FileInputStream fis = new FileInputStream(fileName);
       ps.setBinaryStream(2, fis, fis.available());
       ps.execute();
       ps.close();
     } else {
       PreparedStatement ps = conn.prepareStatement("INSERT INTO IMAGES VALUES (?, empty_blob())");

       ps.setString(1, imageId);
       ps.execute();
       ps.close();

     }
     conn.close();
   } catch (Exception e) {
     e.printStackTrace();
   }
 }

 public void readBlob(String fileName) {
   Connection conn = null;
   try {
     conn = getConnection();
     Statement st = conn.createStatement();
     ResultSet rs = st.executeQuery("SELECT IMAGE FROM IMAGES");
     while (rs.next()) {
        // The following two lines can be replaced by

        // InputStream is = rs.getBinaryStream(1);

       Blob blob = rs.getBlob(1);
       InputStream is = blob.getBinaryStream();

       FileOutputStream fos = null;

       fos = new FileOutputStream("c:/TEMP/" + fileName);
       byte[] data = new byte[1024];
       int i = 0;
       while ((i = is.read(data)) != -1) {
         fos.write(data, 0, i);
       }
     }
     conn.close();

   } catch (Exception e) {
     e.printStackTrace();
   }
 }

 public void writeBlob(String fileName) {
   Connection conn = null;
   try {
     conn = getConnection();
     Statement st = conn.createStatement();
     ResultSet rs = st.executeQuery("SELECT IMAGE FROM IMAGES FOR UPDATE");
     while (rs.next()) {
       Blob blob = rs.getBlob(1);
       System.out.println(blob);
        OutputStream os = blob.setBinaryStream(1);

       FileInputStream fis = null;
       fis = new FileInputStream("c:/TEMP/" + fileName);
       byte[] data = new byte[1];
       int i;
       while ((i = fis.read(data)) != -1) {
         os.write(data, 0, i);
       }
       os.close();
       break;
     }
     conn.close();

   } catch (Exception e) {
     e.printStackTrace();
   }
 }

 private Connection getConnection() throws ClassNotFoundException, SQLException {
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger");
   return conn;
 }

 public static void main(String[] args) {
   BlobTest blobTest = new BlobTest();
   blobTest.insertBlob("img1", "");
   blobTest.writeBlob("2.gif");

 }
}

分享到:
评论

相关推荐

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

    下面将详细介绍这两种数据类型以及如何在Oracle中使用它们存储和读取图片。 1. **CLOB数据类型**: `CLOB`数据类型用于存储大量的字符数据,最大可达到4GB。虽然主要用于存储文本,但在本例中,由于图片可以被转换...

    Java存取OracleBlob字段,图片存储,Blob和BLOB的问题,Clob,oracle.docx

    ### Java存取Oracle Blob 字段详解 #### 一、Blob 和 BLOB 的区别 在处理 Oracle 数据库中的二进制大型对象(Binary Large Object,简称 Blob)时,开发者经常会遇到两个相似但不同的概念:`java.sql.Blob` 和 `...

    Oracle数据库中InterMedia的用法

    Oracle提供两种方法,一种是用JSP和Servlet调用Oracle提供的 interMedia JAVA类库来存取image,其优点是自己可以控制程序,灵活,缺点是复杂,需要自己编写程序。第二种方法就是本文将重点介绍的利用Oracle ...

    Oracle,SQL2000,MYSQL存取图片或二进制数据的功能文件

    `MySQLUploader.java`文件可能包含处理MySQL数据库中图片或二进制数据的Java代码,使用JDBC连接,加载MySQL驱动,通过PreparedStatement执行SQL语句将二进制数据存入数据库。读取时,可以使用ResultSet的...

    oracle存取图片.doc

    在Oracle数据库中存储和检索图片涉及到了数据库操作和文件处理的知识点。以下是对这些内容的详细解释: 1. **Oracle JDBC驱动**: Oracle JDBC驱动是连接Java应用程序和Oracle数据库的桥梁。在示例代码中,`oracle...

    mysql,sqlserver,oracle三种数据库的大对象存取

    但是,SQL Server的IMAGE类型已在SQL Server 2016中被弃用,推荐使用VARBINARY(MAX)代替,它可以存储最多2^31 - 1(2,147,483,647)字节的数据。 例如: ```java PreparedStatement ps = conn.prepareStatement(...

    Java访问数据库存取图片

    在Java编程中,访问数据库存取图片...以上就是使用Java和JDBC访问SQL Server 2000数据库存取图片的基本过程,虽然描述中提到的是SQL Server 2000,但同样的原理适用于其他支持BLOB类型的数据库,如MySQL、Oracle等。

    mysql,sqlserver,oracle三种数据库的大对象存取解析.docx

    本文将对MySQL、SQL Server和Oracle这三种主流关系型数据库系统中的大对象存取进行详细解析。 **MySQL中的大对象存取** MySQL支持几种不同类型的BLOB类型,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。这些类型...

    java存图片到数据库

    考虑使用数据库的文件系统链接(如MySQL的`LOAD DATA INFILE`或Oracle的`DBMS_LOB`包),或者将图片存储在文件系统中,只在数据库中存储路径,以提高效率。 10. **安全注意事项**: 在实际应用中,确保数据库连接...

    图片以二进制存取数据库

    在关系型数据库如MySQL、PostgreSQL、Oracle和SQL Server中,BLOB是一个特殊的数据类型,用于存储大量的二进制数据,例如图片、音频或视频文件。在SQL Server中,这种类型被称为`VARBINARY(MAX)`,它允许存储最多2^...

    spring+mybatis下BLOB字段的图片存取代码

    在实际应用中,还需要考虑异常处理、优化性能(例如,使用流式处理大文件)以及安全性(如防止恶意文件上传)等方面的问题。在上述代码中,我们只展示了基本的图片存取流程,具体实现可能需要根据项目的具体需求进行...

    存取数据库图片

    例如,在VB.NET中,可以使用`MemoryStream`和`pictureBox1.Image = Image.FromStream()`来实现。 7. **性能优化**:由于图片文件可能很大,直接在数据库中处理可能会降低性能。一种常见优化策略是先将图片压缩后再...

    day14--dbutils的使用_事务处理_多表操作_oracle大数据处理

    DBUtils是Apache Commons项目中的一个子项目,它提供了一套强大的工具类来简化Java应用程序中的JDBC编程。相较于传统的JDBC操作,DBUtils能够减少代码量,并且在异常处理和资源关闭方面更为方便。 ##### 增删改查...

    jsp原始demo注册表

    在HTML5中,可以使用`<audio>`标签添加背景音乐,通过CSS的`background-image`属性设置背景图片。它们能够为网页增添氛围和视觉效果。 3. **数据库技术**:在注册系统中,用户的信息需要存储在数据库中。这可能涉及...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; // 全局范围 function test() { global $g_var; // 这样...

    计算机常用英语词汇详解

    **软件**:涵盖了操作系统(Operating System,如Windows、Linux、Mac OS)、应用程序(Application Software)、编程语言(如Java、Python、C++)、数据库管理系统(Database Management System,如MySQL、Oracle、...

Global site tag (gtag.js) - Google Analytics