CLOB该文献类型不支持下载SELECT吗

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)匿名用户不能发表回复!|用sql语句查询clob字段的问题,请大家帮忙!-CSDN论坛
用sql语句查询clob字段的问题,请大家帮忙!
数据库是orcle.
字段类型是clob
我想直接用sql查询,返回字符串.
就象xmltpye的字段,
用select&t.xml字段.getclobval()&from&表&t,
返回的就是clob.
请大家帮忙
select之后强制转换成Clob啊.
本来就是clob,我是要转化为string(VARCHAR2),请问如何转,要在sql中转换
在sql中直接读成String不行吧&clob&是用流读取的
希望能有这样的函数.
clob.put(b);
String&str=new&String(b);
曾经好象做过这样的,有点模糊了,不过大概意思是这样的
clob.put(b);
String&str=new&String(b);
在Oracle中,LOB(Large&Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据量非常大的业务领域(如图象、档案等)。而LONG、LONG&RAW等类型的字段,虽然存储容量也不小(可达2GB),但由于一个表中只能有一个这样类型的字段的限制,现在已很少使用了。&
LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary&Large&Object),适用于存贮非文本的字节流数据(如程序、图象、影音等)。而CLOB,即字符型大型对象(Character&Large&Object),则与字符集相关,适于存贮文本型的数据(如历史档案、大部头著作等)。
下面以程序实例说明通过JDBC操纵Oracle数据库LOB类型字段的几种情况。
先建立如下两个测试用的数据库表,Power&Designer&PD模型如下:
建表SQL语句为:
CREATE&TABLE&TEST_CLOB&(&ID&NUMBER(3),&CLOBCOL&CLOB)
CREATE&TABLE&TEST_BLOB&(&ID&NUMBER(3),&BLOBCOL&BLOB)
一、&CLOB对象的存取
1、往数据库中插入一个新的CLOB对象
public&static&void&clobInsert(String&infile)&throws&Exception
/*&设定不自动提交&*/
boolean&defaultCommit&=&conn.getAutoCommit();
conn.setAutoCommit(false);
/*&插入一个空的CLOB对象&*/
stmt.executeUpdate("INSERT&INTO&TEST_CLOB&VALUES&('111',&EMPTY_CLOB())");
/*&查询此CLOB对象并锁定&*/
ResultSet&rs&=&stmt.executeQuery("SELECT&CLOBCOL&FROM&TEST_CLOB&WHERE&ID='111'&FOR&UPDATE");
while&(rs.next())&{
/*&取出此CLOB对象&*/
oracle.sql.CLOB&clob&=&(oracle.sql.CLOB)rs.getClob("CLOBCOL");
/*&向CLOB对象中写入数据&*/
BufferedWriter&out&=&new&BufferedWriter(clob.getCharacterOutputStream());
BufferedReader&in&=&new&BufferedReader(new&FileReader(infile));
while&((c=in.read())!=-1)&{
out.write(c);
in.close();
out.close();
/*&正式提交&*/
conn.commit();
}&catch&(Exception&ex)&{
/*&出错回滚&*/
conn.rollback();
/*&恢复原提交状态&*/
conn.setAutoCommit(defaultCommit);
2、修改CLOB对象(是在原CLOB对象基础上进行覆盖式的修改)
public&static&void&clobModify(String&infile)&throws&Exception
/*&设定不自动提交&*/
boolean&defaultCommit&=&conn.getAutoCommit();
conn.setAutoCommit(false);
/*&查询CLOB对象并锁定&*/
ResultSet&rs&=&stmt.executeQuery("SELECT&CLOBCOL&FROM&TEST_CLOB&WHERE&ID='111'&FOR&UPDATE");
while&(rs.next())&{
/*&获取此CLOB对象&*/
oracle.sql.CLOB&clob&=&(oracle.sql.CLOB)rs.getClob("CLOBCOL");
/*&进行覆盖式修改&*/
BufferedWriter&out&=&new&BufferedWriter(clob.getCharacterOutputStream());
BufferedReader&in&=&new&BufferedReader(new&FileReader(infile));
while&((c=in.read())!=-1)&{
out.write(c);
in.close();
out.close();
/*&正式提交&*/
conn.commit();
}&catch&(Exception&ex)&{
/*&出错回滚&*/
conn.rollback();
/*&恢复原提交状态&*/
conn.setAutoCommit(defaultCommit);
3、替换CLOB对象(将原CLOB对象清除,换成一个全新的CLOB对象)
public&static&void&clobReplace(String&infile)&throws&Exception
/*&设定不自动提交&*/
boolean&defaultCommit&=&conn.getAutoCommit();
conn.setAutoCommit(false);
/*&清空原CLOB对象&*/
stmt.executeUpdate("UPDATE&TEST_CLOB&SET&CLOBCOL=EMPTY_CLOB()&WHERE&ID='111'");
/*&查询CLOB对象并锁定&*/
ResultSet&rs&=&stmt.executeQuery("SELECT&CLOBCOL&FROM&TEST_CLOB&WHERE&ID='111'&FOR&UPDATE");
while&(rs.next())&{
/*&获取此CLOB对象&*/
oracle.sql.CLOB&clob&=&(oracle.sql.CLOB)rs.getClob("CLOBCOL");
/*&更新数据&*/
BufferedWriter&out&=&new&BufferedWriter(clob.getCharacterOutputStream());
BufferedReader&in&=&new&BufferedReader(new&FileReader(infile));
while&((c=in.read())!=-1)&{
out.write(c);
in.close();
out.close();
/*&正式提交&*/
conn.commit();
}&catch&(Exception&ex)&{
/*&出错回滚&*/
conn.rollback();
/*&恢复原提交状态&*/
conn.setAutoCommit(defaultCommit);
4、CLOB对象读取
public&static&void&clobRead(String&outfile)&throws&Exception
/*&设定不自动提交&*/
boolean&defaultCommit&=&conn.getAutoCommit();
conn.setAutoCommit(false);
/*&查询CLOB对象&*/
ResultSet&rs&=&stmt.executeQuery("SELECT&*&FROM&TEST_CLOB&WHERE&ID='111'");
while&(rs.next())&{
/*&获取CLOB对象&*/
oracle.sql.CLOB&clob&=&(oracle.sql.CLOB)rs.getClob("CLOBCOL");
/*&以字符形式输出&*/
String&content&=&new&String();
if&(clob&!=&null)&{
&&&&&&&&&&Reader&is&=&clob.getCharacterStream();
&&&&&&&&&&BufferedReader&br&=&new&BufferedReader(is);
&&&&&&&&&&String&s&=&br.readLine();
&&&&&&&&&&while&(s&!=&null)&{
&&&&&&&&&&&&content&+=&s;
&&&&&&&&&&&&s&=&br.readLine();
&&&&&&&&&&}
}&catch&(Exception&ex)&{
conn.rollback();
/*&恢复原提交状态&*/
conn.setAutoCommit(defaultCommit);
直接查可以出记录
得到Clob之后调用如下代码就可以了.
Clob&content_Clob=getYourClog();
long&contentL
String&content=
if(content_Clob!=null){
&&contentLength=content_Clob.length();
&&content=content_Clob.getSubString(1,(int)contentLength);
to&kingofhawks(蓝鹰)&
我按你的这样做法,抛出了异常:
java.sql.SQLException:&类型长度大于最大值
java.sql.SQLException:&违反协议
另外,我的环境:
Oracle8i,ojdbc14.jar
不知道这是为什么?先谢谢了
把你出异常的那部分代码贴出来看看,首先确保你的数据库表设计正确的哦:&另外我不知道8i的数据库是否支持Clob,以上代码是在Oracle&10g中通过.
8i也是支持的,只是可能一些细节不一样,我想LZ还是按照&softken2005()&和&kingofhawks(蓝鹰)&这样子做,应该是没有问题的。
to&kingofhawks(蓝鹰)&:
我的问题已经解决,换了驱动(oracle.jar)就行了。
fanter(爱了就爱了)&
我的问题已经解决,换了驱动(oracle.jar)就行了。
------------------------------------------------------
你这个什么驱动啊?
回复clob型不能用 distinct,以及转换clob类型方法 - 芊墨 - 博客园
举例clob型不能用 distinct
public List&WorkingPaper& findAssignedWorkPapers(String projectId,
String auditedObjectId, String userId) {//
String jpql = "SELECT distinct w FROM WorkingPaper w LEFT OUTER JOIN w.paperUsers AS u WHERE w.project.id = ? AND w.deleted = ? AND u.userType= ? ";
//clob型不能用 distinct
String jpql=" SELECT w FROM WorkingPaper w where w.id in (select distinct t.id FROM WorkingPaper t LEFT OUTER JOIN t.paperUsers AS u WHERE t.project.id = ? AND t.deleted = ? AND u.userType= ? ";
List&Object& params = new ArrayList&Object&();
params.add(projectId);
params.add(Boolean.FALSE);
params.add(UserType.PAPER_PRINCIPAL);
StringBuilder sb = new StringBuilder(jpql);
if (StringUtils.isNotBlank(auditedObjectId)) {
sb.append("AND t.auditedUnitId = ? ");
params.add(auditedObjectId);
if (StringUtils.isNotBlank(userId)) {
sb.append("AND u.userId = ? ");
params.add(userId);
sb.append(")");
sb.append(" order by w.code");
return this.find(sb.toString(), params.toArray()); }
解决存储字符不够,转换为clob格式SQL
--审计公示,解决审计公示内容存储字符不够--select * from IAM_AUDIT_PUBLICITY--第一步,将publicity_content重命名为publicity_content_bakalter table IAM_AUDIT_PUBLICITY rename column publicity_content to publicity_content_ --第二步,在表中新建clob属性列publicity_contentalter table IAM_AUDIT_PUBLICITY add publicity_--第三部,将旧表中的数据拷贝到新表update IAM_AUDIT_PUBLICITY set publicity_content=publicity_content_
--第四部,删除备份列alter table IAM_AUDIT_PUBLICITY drop column publicity_content_数据库中clob的类型sql怎么查询_百度知道
数据库中clob的类型sql怎么查询
我有更好的答案
).executeQuery(&SELECT TOP 1 * FROM Test1&quot,使用2种方法使用CLOB1 相对比较小的,可以用String进行直接操作,把CLOB看成字符串类型即可2 如果比较大,可以用 getAsciiStream 或者 getUnicodeStream 以及对应的 setAsciiStream 和 setUnicodeStream 即可读取数据1 ResultSet rs = stmt在绝大多数情况下;2 rs.next()
采纳率:97%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 由于不支持的分享类型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信