blob的插入和讀取
来源:互联网 发布:付费问答源码 编辑:程序博客网 时间:2024/06/07 02:04
-- 創建測試表
CREATE TABLE ZETA_BLOB
(
FID NUMBER,
FPIC BLOB
);
-- 創建insert的procedure,參考了蓋國強老師的http://www.eygle.com/archives/2005/04/eoaiplsqlieoeao.html
CREATE OR REPLACE PROCEDURE zeta_load_blob (pfname VARCHAR2,pid number)
IS
src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
BEGIN
src_file := bfilename('SOURCE_DIR', pfname);
INSERT INTO zeta_blob (fid,fpic)
VALUES (pid,EMPTY_BLOB())
RETURNING fpic INTO dst_file;
SELECT fpic INTO dst_file
FROM zeta_blob WHERE fid = pid FOR UPDATE;
dbms_lob.fileopen(src_file, dbms_lob.file_readonly);
lgh_file := dbms_lob.getlength(src_file);
dbms_lob.loadfromfile(dst_file, src_file, lgh_file);
UPDATE zeta_blob SET fpic = dst_file
WHERE fid = pid;
dbms_lob.fileclose(src_file);
commit;
END zeta_load_blob;
-- 加入一條記錄
exec zeta_load_blob('100005.pdf',1);
-- 通過procedure來獲得blob
create or replace procedure proc_test_get_pdf(p_bill_id in number, p_pdf out blob)
is
begin
select fpic into p_pdf
from zeta_blob where fid = p_bill_id;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
-- 簡單的pl/sql的測試
declare
b blob;
begin
proc_test_get_pdf(1,b);
dbms_output.put_line('begin');
dbms_output.put_line(DBMS_LOB.getlength(b));
end;
-- JDBC調用代碼
<%@page import="oracle.sql.BLOB"%>
<%@ page contentType="text/html;charset=Big5"%>
<%@ page import="java.io.ByteArrayOutputStream" %>
<%@ page import="java.sql.*" %>
<%
try {
session = request.getSession(true);
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@oracletest02:1525:zeta", "hr", "oracle");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String sql = "{call proc_test_get_pdf(?,?)}";
//String sql = "{call proc_test_get_pdf@zeta(?,?)}"; // Oracle不允許遠程調用含有lob參數的procedure。 PLS-00564: lob arguments are not permitted in calls to remote server
System.out.println("1");
oracle.jdbc.driver.OracleCallableStatement stmt = (oracle.jdbc.driver.OracleCallableStatement)conn.prepareCall(sql);
stmt.setInt(1, 1);
stmt.registerOutParameter(2, oracle.jdbc.driver.OracleTypes.BLOB);
System.out.println("2");
stmt.execute();
byte[] bytes = stmt.getBytes(2);
System.out.println("3");
System.out.println("4=>" + bytes.length);
baos.write(bytes);
stmt.close();
conn.close();
response.setHeader("Content-Disposition", " attachment; filename=/"zeta.pdf/"");
response.setContentType("application/pdf");
response.setContentLength(baos.size());
ServletOutputStream sos = response.getOutputStream();
baos.writeTo(sos);
sos.flush();
session.invalidate();
} catch(Exception err) {
err.printStackTrace();
}
%>
- blob的插入和讀取
- Oracle blob字段的插入和更新
- Blob 字段的插入
- oracle和mysql的Blob字段的读取和插入
- oracle数据库对blob类型数据的存和取
- Oracle Blob查询和插入
- BLOB类型插入数据的设计思路和处理流程
- mybatis框架下BLob文件的插入和获取
- MySQL 中Blob类型数据的插入和读取
- oracle 的BLOB插入方法
- MySql的Blob插入(JDBC)
- BLOB和CLOB的区别以及在ORALCE中的插入和查询操作
- BLOB和CLOB的区别以及在ORALCE中的插入和查询操作
- BLOB和CLOB的区别以及在ORALCE中的插入和查询操作
- 二进制文件(BLOB类型操作)的插入
- java oracle blob字段的插入
- mysql blob数据的插入与查询
- LONG、BLOB、CLOB的区别以及在ORALCE中的插入和查询操作
- 前营中间件(2) - 配置
- silverlight利用代码添加带图标的treeviewItem
- typedef和#define的用法与区别
- typedef的四个用途和两个陷阱
- Myeclipse 输入问题
- blob的插入和讀取
- 软件测试实践 之测试环境的规划与管理
- HTTP协议详解
- 摘:jsp中获取当前路径
- 分享一个简单的列表效果了(显示:列表|详细)
- AndroidManifest.xml文件结构说明
- IPv6套接字编程介绍
- cisco 命令 路由 是实现 不同的 vlan 通信
- 一些系统及应用小常识