- 浏览: 187263 次
- 性别:
- 来自: 杭州
文章分类
最新评论
ORACLE中的大对象:
LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列
LONG RAW: 可变长二进制数据,最长2G
CLOB: 字符大对象Clob 用来存储单字节的字符数据
NCLOB: 用来存储多字节的字符数据
BLOB: 用于存储二进制数据
BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复.
CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制。
要保存图片、文本文件、Word文件各自最好用哪种数据类型?
--BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用BLOB。
对CLOB与BLOB对象的操作
1. 查询(GET)
查询CLOB
//获得数据库连接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需要“for update”
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");
if (rs.next())
{
java.sql.Clob clob = rs.getClob("CLOBATTR");
Reader inStream = clob.getCharacterStream();
char[] c = new char[(int) clob.length()];
inStream.read(c);
//data是读出并需要返回的数据,类型是String
data = new String(c);
inStream.close();
}
inStream.close();
con.commit();
con.close();
查询BLOB
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需要“for update”
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");
if (rs.next())
{
java.sql.Blob blob = rs.getBlob("BLOBATTR");
InputStream inStream = blob.getBinaryStream();
//data是读出并需要返回的数据,类型是byte[]
data = new byte[input.available()];
inStream.read(data);
inStream.close();
}
inStream.close();
con.commit();
con.close();
2. 插入(INSERT)
插入CLOB
//获得数据库连接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一个空对象empty_clob()
st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
//锁定数据行进行更新,注意“for update”语句
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Clob对象后强制转换为oracle.sql.CLOB
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");
Writer outStream = clob.getCharacterOutputStream();
//data是传入的字符串,定义:String data
char[] c = data.toCharArray();
outStream.write(c, 0, c.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();
插入BLOB
//获得数据库连接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一个空对象empty_blob()
st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");
//锁定数据行进行更新,注意“for update”语句
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Blob对象后强制转换为oracle.sql.BLOB
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");
OutputStream outStream = blob.getBinaryOutputStream();
//data是传入的byte数组,定义:byte[] data
outStream.write(data, 0, data.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();
转自:http://www.blogjava.net/Simmons/articles/333302.html
发表评论
-
oracle树操作,异步查询,子节点过多分批查询
2014-04-11 15:31 1033oracle树操作链接 select ... -
oracle数组游标批量插入
2013-12-07 16:40 3348declare type ary is table ... -
MERGE into (用法笔记)
2013-11-05 14:01 984MERGE INTO trackedVehicleBus ... -
Oracle 随机取一行数据
2012-11-19 19:34 1297从表中随机取一条数据 select * from ( ... -
(原) ORACLE10g创建SCHEDULER_JOB
2012-08-03 16:07 1679BEGIN SYS.DBMS_SCHEDULER ... -
PL/SQL Developer使用技巧
2012-07-18 14:12 18781、PL/SQL Developer记住登陆密码 ... -
Oracle体系结构之-物理结构(transshipment)
2012-06-16 09:35 846一、物理文件的分类 ... -
oracle Toad使用指南
2012-06-19 08:34 6151一.Toad功能综述二. ... -
oracle Optimizer CBO RBO (优化器)
2012-06-13 08:34 1077Oracle 的优化器有两 ... -
共享锁和排它锁
2012-06-12 08:23 9641.共享锁【S锁】 又称读锁,若事务T对数据对象 ... -
oracle with admin option 和with grant option
2012-06-20 08:29 1575with admin option 用于系统权限授权,w ... -
oracle10 新功能DBMS_SCHEDULER 简介
2012-06-13 08:40 3969Oracle 10g新增了scheduler的功能,功能 ... -
ORACLE 用户自定义异常
2012-06-21 12:57 58481CREATE OR REPLACE PROCEDURE te ... -
ORACLE SGA的结构、功能和一般设置
2012-06-17 08:50 1050System global area(SGA) 是一组共享的内 ... -
oracle中的检查点Ckpt和SCN号
2012-06-12 08:28 5623Checkpoint checkpoint是用来减少在数 ... -
oracle表之间的关联方式
2012-06-14 08:42 1417oracle表之间的关联方 ... -
oracle中使用on delete cascade
2012-06-15 08:38 7771oracle中使用on delete ca ... -
关于oracle的行级锁
2012-06-17 08:52 985在oracle中,行级锁只对用户正在访问的行进行锁定。 ... -
oracle 10g 创建job 相关-dbms_scheduler.create_job
2012-06-19 08:35 8528grant create job to somebody ... -
PGA与SGA的区别,PGA的功能介绍
2012-06-15 08:39 1214当用户进程连接到数 ...
相关推荐
oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现
网上说用流来处理,没有这么做。这像是一个Bug,只要把插入的数据,默认扩充到2000以上就ok了。 下面是这段代码: if((temp.length()>=1000)&&(temp.length()<=2000)){ temp=StringUtils.rightPad(temp, 2008); }...
一开始一直以为是hibernate的内部处理上有关联操作导致的删除和更新数据缓慢。所以将原先使用hibernate的saveOrupdate方法,改查jdbc的 sql语句来处理update和delete数据操作。但是依然没效果!!! 怀疑数据库出...
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替: A、正确选择复合索引中的主列字段,一般是选择性较好的字段; B、复合...
注意:alter modify不支持一次修改多个列,但是Oracle支持多列修改 但是MySQL可以通过多个modify的方式完成: alter table user modify tel varchar(15) default '02087654321' first, modify name varchar(20) ...
实例307 打印超长字符串自动换行 实例308 批量打印文档 实例309 实现横向打印 实例310 设置打印纸大小 实例311 获取打印纸的左边距和上边距 10.11 打印预览 实例312 修改文档/视图结构默认的打印预栏工具栏 ...
实例307 打印超长字符串自动换行 实例308 批量打印文档 实例309 实现横向打印 实例310 设置打印纸大小 实例311 获取打印纸的左边距和上边距 10.11 打印预览 实例312 修改文档/视图结构默认的打印预栏工具栏 ...
3.3 图片效果 cc实例089 图片马赛克效果 cc实例090 图片百叶窗效果 cc实例091 电影胶片特效 cc实例092 翻转图片效果 3.4 图片颜色转换 cc实例093 图像的锐化处理 cc实例094 图片反色处理 cc实例095 ...
cc实例207c连接Oracle数据库 8.2 添加数据 cc实例208 利用INSERT语句批量插入数据 cc实例209 利用SELECTcINTO生成临时表 8.3 更新数据 cc实例210 批量修改数据 cc实例211 将指定...
cc实例207c连接Oracle数据库 8.2 添加数据 cc实例208 利用INSERT语句批量插入数据 cc实例209 利用SELECTcINTO生成临时表 8.3 更新数据 cc实例210 批量修改数据 cc实例211 将指定...