可以通过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 两个字段什么分别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)