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

表结构
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;
	}
}
 
 

  

猜你喜欢

转载自qun715715.iteye.com/blog/2190934