`
qun715715
  • 浏览: 12635 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdbc 调用 oracle 存储过程 写大字段

    博客分类:
  • jdbc
阅读更多
表结构
create table T_IMAGE
(
ID NUMBER,
TITLE VARCHAR2(10),
IMAGE BLOB
)

  

存储过程
CREATE OR REPLACE PROCEDURE SAVE_BLOB_IMAGE2(
PC_TITLE IN VARCHAR2,
PB_IMAGE OUT BLOB
) as

BEGIN

INSERT INTO t_image(id,title,image) values(autoid.nextval,PC_TITLE,empty_blob()) //autoid,自增长序列
RETURNING image INTO PB_IMAGE;
END;

package test;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;

import oracle.sql.BLOB;

public class Test {

	public static void main(String[] args) {
		String file = "E:/my/xiangpian/SNV32892.JPG";
		byte[] data = getBytesFromFile(new File(file));
		saveImageUseProc(data, "标题");
	}

	public static byte[] getBytesFromFile(File f) {
		if (f == null) {
			return null;
		}
		try {
			FileInputStream stream = new FileInputStream(f);
			ByteArrayOutputStream out = new ByteArrayOutputStream(1000);
			byte[] b = new byte[1000];
			int n;
			while ((n = stream.read(b)) != -1)
				out.write(b, 0, n);
			stream.close();
			out.close();
			return out.toByteArray();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static Integer saveImageUseProc(byte[] data, String title) {
		BLOB blob = null;
		OutputStream outStream;
		Connection conn = getConnection();
		try {
			conn.setAutoCommit(false);
			String call = "{call SAVE_BLOB_IMAGE2(?,?)}";// 调用语句
			CallableStatement proc = conn.prepareCall(call);// 调用存储过程
			proc.setString(1, title);
			proc.registerOutParameter(2, Types.BLOB);

			proc.execute();

			blob = (BLOB) proc.getBlob(2);
			outStream = blob.getBinaryOutputStream();
			outStream.write(data, 0, data.length);
			outStream.flush();
			outStream.close();

			proc.close();
			conn.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		return null;
	}

	public static Connection getConnection() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
		Connection conn = null;
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, "test", "test");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
		return conn;
	}
}
 
 

  

分享到:
评论

相关推荐

    jdbc批量插入大字段

    因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...

    类型长度大于最大值(Java调用存储过程)

    标题与描述均指出的问题是“类型长度大于最大值(Java调用存储过程)”,这通常意味着在使用Java程序调用Oracle数据库的存储过程时,某个字段或参数的长度超过了数据库定义的最大长度。这种情况可能由多种因素引起,...

    oracle数据库的clob大字段在jdbc中的处理方式

    Oracle数据库中的CLOB(Character Large Object)类型是用来存储大量字符数据的,比如长文本、XML文档等。在Java中,当我们需要通过JDBC(Java ...确保高效、安全地操作这些大字段,可以提高应用程序的性能和用户体验。

    jdbc课件以及源代码(数据源)

    **处理大字段数据**: 对于大数据类型,如BLOB(Binary Large Object)和CLOB(Character Large Object),JDBC提供了专门的方法来处理。例如,`PreparedStatement.setBlob()`用于设置BLOB数据,`ResultSet.getBlob...

    数据库读取clob字段

    在Oracle数据库中,CLOB(Character Large Object)是一种用于存储大量文本数据的数据类型。CLOB能够容纳4GB的文本信息,适用于存储如文章、报告或者XML文档等大型文本数据。本文将详细介绍如何在Oracle数据库中读取...

    Hibernate存储Clob字段的方式总结

    但随着数据库技术的发展,越来越多的数据库厂商提供了更加简单的方式来操作这些大字段。例如,Oracle数据库提供了支持以String方式处理Clob的新驱动程序。 在Hibernate框架中,可以直接将数据库的Clob字段映射为...

Global site tag (gtag.js) - Google Analytics