oracle数据库如何查询一张表中BLOB字段中的内容

oracle数据库如何查询一张表中BLOB字段中的内容,第1张

可以通过dbms_lob来辅助查询:

--创建测试表

create table tt1 (XXName varchar2(20),ProductIDs blob);

--向测试表中插入数据

insert into tt1 select 'a',to_blob('a001b002') from dual;

--查询blob字段中含有'a001'的记录select XXName from tt1 where mod(dbms_lobinstr(ProductIDs,'a001'),2)=1

--删除测试表

drop table tt1;

先把文件读取到内存,再以二进制格式保持到数据库中的大字段中(clob或clob)。

写大对象。

Java code

public static void main(String[] args) {

// TODO Auto-generated method stub

Connection conn = null;

Statement stat = null;

ResultSet rs = null;

OutputStream os = null;

FileInputStream fis = null;

int bs = 0;

try {

ClassforName("oraclejdbcdriverOracleDriver");

conn = DriverManagergetConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","---");

connsetAutoCommit(false);

stat = conncreateStatement();

statexecuteUpdate("insert into t_video(id,video) values(1,empty_blob())");

rs = statexecuteQuery("select video from t_video where id = 1");

rsnext();

oraclesqlBLOB blo = (oraclesqlBLOB)rsgetBlob(1);

os = blogetBinaryOutputStream();

bs = blogetBufferSize();

fis = new FileInputStream("D:\\Temp\\MPlayer-CVS-20040808-K&K\\mplayerexe");

byte[] buf = new byte[bs];

int length = 0;

while(true)

{

length = fisread(buf);

if(length == -1) break;

oswrite(buf,0,length);

}

osclose();

os = null;

fisclose();

fis = null;

conncommit();

connsetAutoCommit(true);

connclose();

} catch(Exception ex) {

exprintStackTrace();

}

}

读大对象

Java code

InputStream is = null;

FileOutputStream fos = null;

byte[] buf = null;

int bs = 0;

try {

ClassforName("oraclejdbcdriverOracleDriver");

conn = DriverManagergetConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","-");

connsetAutoCommit(false);

stat = conncreateStatement();

rs = statexecuteQuery("select video from t_video where id = 1");

rsnext();

oraclesqlBLOB blo = (oraclesqlBLOB)rsgetBlob(1);

bs = blogetBufferSize();

buf = new byte[bs];

int length = 0;

is = blogetBinaryStream();

fos = new FileOutputStream("d:\\testexe");

while(true) {

length = isread(buf);

if(length == -1) break;

foswrite(buf,0,length);

}

fosclose();

fos = null;

isclose();

is = null;

conncommit();

connsetAutoCommit(true);

connclose();

CLOB全称为字符大型对象(Character Large Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节

通常像、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等 *** 作都提供很大的方便。

你要理解这不同的连接产生的效果就知道何时用了

相等连接 要连接的两个表符合查询条件 记录才会显示

自连接和相等连接一样吧

左外是左表的数据全部显示 而右面显示符合条件的数据 比如 学生表和成绩表 学生信息要全显示 成绩匹配学生 匹配不上的显示空值

不知道你用的编程语言是什么 若是java 的话 直接从数据库里面拿(如果有hibernate支持)那就domaingetBlob()。然后用流去将blob转换成string 具体怎么做 百度。

存值的时候是将表单的string转换成blob再塞进数据库。newSerialBlob(String对象的getBytes())

BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理ORACLE数据库,通常像、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等 *** 作都提供很大的方便。

例:假设给oracle数据库导入blob类型的,放在目录G:\images下。1先创建一个目录directory,命名为IMAGES;CREATE OR REPLACE DIRE,TORYIMAGES AS 'G:\test';或者直接在PlSql Directories目录下新建目录;2创建一个存储过程,批量导入blobcreate or replace procedure img_insert asbeginDECLAREf_lob bfile;--文件类型b_lobblob;--用来存储的名称filenamevarchar2(400);begin--循环的初始值for i in 1 100 loop--找出每一列的文件名,因为文件名和名称是一样的select tflnm into filename from ZS_GC_SNIMDT t where tid =i;--查找到之后,执行update *** 作,插入空的blob (注意IMAGES一定要大写)update ZS_GC_SNIMDT set brfl = empty_blob()whereid = i return brfl into b_lob;--获取指定目录下的文件f_lob := bfilename('IMAGES', filename);-- 以只读的方式打开文件dbms_lobfileopen(f_lob, dbms_lobfile_readonly);--传递对象dbms_lobloadfromfile(b_lob, f_lob,dbms_lobgetlength(f_lob));--关闭原始文件

以上就是关于oracle数据库如何查询一张表中BLOB字段中的内容全部的内容,包括:oracle数据库如何查询一张表中BLOB字段中的内容、怎样能将文件上传到Oracle数据库中、oracle clob 和 blob 两个字段什么分别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9826211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存