`
isiqi
  • 浏览: 16500122 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java程序中使用oracle数据库LOB字段的总结

阅读更多

LOB中我们用的比较多的主要有两种CLOB和BLOB,我们对两种类型分别讨论

1.CLOB是字符型LOB,主要存储文本信息,最长为4G.,在J2EE程序中,比如网页的textarea中的字符信息比较长,Varchar2字段类型不能满足时,我们就得用CLOB数据类型,我们这次项目中就碰到这种情况.现在我们先说说如何存取CLOB字段

现在我要把网页中的textarea元素的信息保存到数据库的CLOB字段中, 我们都知道textarea中的信息当然不能直接保存成CLOB,我们在后台得到的是String类型的,不多说拉,我们还是以一个实例讲吧!

先建一个test表,表有2个字段:ID,CONTENTS,其中CONTENTS保存CLOB类型的文本数据

createtableTEST
(
ID
VARCHAR2(18)notnull,
CONTENTSCLOB,
)

接着我们编写一个测试用的jsp文件ClobTest.jsp,代码如下

<%...@pagelanguage="java"contentType="text/html;charset=gb2312"%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<title>Clob对象的存取测试</title>
</head>

<body>
<formname="test"method="post"action="clobTest.action">
<tablewidth="80%"height="88"border="0"align="center"cellpadding="0"cellspacing="0">
<tr>
<tdheight="30"align="center">输入ID号<inputtype="text"name="ID">
</tr>
<tr>
<tdalign="center">
<textarearows="28"cols="68"name="CONTENTS"></textarea>
</td>
</tr>
<tr>
<tdalign="center">
<inputtype="submit"name="Submit"value="提交">
</td>
</tr>
</table>
</form>
</body>
</html>

点击”提交”按钮,我们在后台的到的是2个String类型的对象

String strID = request.getParameter("ID");
String strContents = request.getParameter("CONTENTS");

接着我们要做的任务就是如何把String类型CONTENTS存到数据库中的CLOB类型字段中!

注意:LOB数据不能象其它类型数据一样直接插入(INSERT)。插入前必须先插入一个空的LOB对象,CLOB类型的空对象为EMPTY_CLOB (),BLOB类型的空对象为EMPTY_BLOB()。之后通过SELECT命令查询得到先前插入的记录并锁定,继而将空对象修改为所要插入的LOB对象。

//我们先插入一个空的CLOB对象
publicintinsertEmptyClob()throwsException...{
Statementstatement
=null;
intintResult=-1;
try...{
//创建数据库操作语句
statement=connection.createStatement();
//定义SQL语句
StringstrSQL=“INSETINTOTEST(ID,CONTENTS)VALUES(strID,EMPTY_CLOB())”;
//执行SQL语句
intResult=statement.executeUpdate(strSQL);
System.out.println(
"intResultvalusis"+intResult);
returnintResult;
}
catch(Exceptione)...{
e.printStackTrace();
return-1;
}
finally...{
if(statement!=null)...{
statement.close();
}

}

}


//把strCONTENT插入CLOB字段

publicvoidinsertClob()throwsException...{
Statementstatement
=null;
ResultSetresultset
=null;
try...{
//设置不自动提交
connection.setAutoCommit(false);
//创建数据库操作语句
statement=connection.createStatement();
//定义SQL语句
StringstrSQL=“SELECTCONTENTSFROMTESTWHEREID=strID"
resultset=statement.executeQuery(strSQL);
oracle.sql.CLOBcontents
=null;
while(resultset.next())...{
//取出CLOB对象
contents=(oracle.sql.CLOB)resultset.getClob("CONTENTS");
}

Writerout
=contents.getCharacterOutputStream();
out.write(strContents);
out.flush();
out.close();
//数据库提交
connection.commit();
}
catch(Exceptione)...{
e.printStackTrace();
}
finally...{
if(resultset!=null)...{
resultset.close();
}

if(statement!=null)...{
statement.close();
}

}

}


OK,我们已经把这段文本以CLOB字段的形式保存到数据库中了,在实际应用中,如果要保存或修改一条记录,我们要分2步做,先保存或修改非LOB字段类型的字段,再保存或修改LOB字段!接下来我们来把刚才保存到数据库中的CLOB字段读到jsp页面中去。

我们在保存的时候,CLOB字段会把上面textarea中的文本按原来的格式一行一行(包括空格)都保存到CLOB字段中,读取的时候我们只要按照原来格式读起出来就行了(我这里自己用了一个小处理方法,但如果你有更好的方法请告诉我)。在这里我们把CLOB读到StringBuffer中,为了保存不同行我在行之间加了个“&”字符来区分。最后转化成String

放到VO中,这样就保证从前台到后台,从后台到前台的数据传递的一致性!代码如下:

/***//**
*获取CLOB文本对象
*
@paramsbSQL
*
@return
*
@throwsjava.lang.Exception
*/


publicStringselectIncludeClob(StringBuffersbSQL)throwsException...{
Statementstmt
=null;
ResultSetrs
=null;
StringBuffersbResult
=newStringBuffer();
try...{
//设定数据库不自动提交
//connection.setAutoCommit(false);
//创建数据库操作语句
stmt=connection.createStatement();
//获取结果集
rs=stmt.executeQuery(sbSQL.toString());

while(rs.next())...{
CLOBclob
=(CLOB)rs.getClob("CONTENTS");
ReaderisClob
=clob.getCharacterStream();
BufferedReaderbfClob
=newBufferedReader(isClob);
StringstrClob
=bfClob.readLine();
while(strClob!=null)...{
sbResult.append(strClob);
bResult.append(
"&");
strClob
=bfClob.readLine();
}

}

//提交事务
//connection.commit();
}
catch(Exceptione)...{
e.printStackTrace();
throwe;
}
finally...{
if(rs!=null)...{
rs.close();
}

if(stmt!=null)...{
stmt.close();
}

}

returnsbResult.toString();
}


到jsp页面中,我们从VO中获取改文本信息。

<textarearows="42"cols="68"name="CONTENTS"style="border-style:solid;border-color:#FFFFFF;font-family:仿宋_GB2312;font-size:14pt;line-height:200%;margin-top:8;margin-bottom:6">
<%...
Stringcontent=vo.getContent();
String[]contentArray=content.split("&");
for(inti=0;i<contentArray.length;i++){
Strings=contentArray[i];
out.println(s);
}
%>
</textarea>

这样我们就保证什么格式保存就以什么格式显示。

2.BLOB字段,二进制LOB,主要存储二进制数据,最长为4G,在J2EE程序中,一般类似于图片和文件的保存。当然也有另一种方法,就把图片和文件保存在硬盘上,数据库中只保存图片的链接地址和文件在服务器上的路径。如果遇到文件和图片比较重要的还是需要保存到数据库中(例如:我们做国土资源项目的时候,好多图片、文件就很重要,需要保存到数据库中),下面我写一个保存文件到数据库的Blob字段和从数据库的Blob字段中获取文件的方法

/***//**
*把上传的文件保存到数据库的Blob字段中
*
@paramstrTableName对应的表名称
*
@paramstrColumnName表中保存文件的Blob字段名称
*
@paraminputStream输入的文件流
*
@paramsbSQLWherewhere条件
*
@throwsjava.lang.Exception
*/

publicstaticvoidfileUpload(StringstrTableName,
StringstrColumnName,
InputStreaminputStream,
StringBuffersbSQLWhere)
throwsException...{
Connectioncon
=null;
ResultSetresultset
=null;
Statementstmt
=null;
try...{
//得到数据库连接
con=DBConnector.getConnection();
//构建查询语句
StringBuffersbSQL=newStringBuffer();
sbSQL.append(
"UPDATE");
sbSQL.append(strTableName);
sbSQL.append(
"SET");
sbSQL.append(strColumnName);
sbSQL.append(
"=EMPTY_BLOB()");
sbSQL.append(sbSQLWhere);
System.out.println(
"updatesqlvalueis*******"+sbSQL.toString());
//获取数据库操作语句
stmt=con.createStatement();
//插入空的blob对象
stmt.executeUpdate(sbSQL.toString());
con.setAutoCommit(
false);
StringBuffersbSQLBlob
=newStringBuffer();
sbSQLBlob.append(
"SELECT");
sbSQLBlob.append(strColumnName);
sbSQLBlob.append(
"FROM");
sbSQLBlob.append(strTableName);
sbSQLBlob.append(sbSQLWhere);
sbSQLBlob.append(
"FORUPDATE");
System.out.println(
"selectsqlvalueis*********"+sbSQL.toString());
resultset
<sp
分享到:
评论

相关推荐

    批量导出ORACLE数据库BLOB字段生成图片

    用户只需提供必要的连接信息和表字段名,就能自动批量导出BLOB字段中的图片。 总之,批量导出Oracle数据库中的BLOB字段生成图片涉及到了数据库连接、SQL查询、BLOB数据处理和文件I/O等多个技术环节。掌握这些知识点...

    批量导出ORACLE数据库BLOB字段生成文件

    本教程将详细讲解如何批量导出Oracle数据库中的BLOB字段并生成文件,适用于需要定期或一次性处理大量图片或其他BLOB数据的场景。 首先,确保你已经在本地安装了Oracle客户端。Oracle客户端提供了SQL*Plus和其他工具...

    Spring+Hibernate处理Oracle lob字段(一)

    在Oracle数据库中,LOB字段主要有BLOB(Binary Large Object)和CLOB(Character Large Object)两种类型,分别用于存储二进制和字符数据。处理这些字段时,我们需要配置Hibernate的实体类和映射文件。 在实体类中...

    运用Java如何存取Oracle中的CLOB类型字段

    以下是一个使用Java访问Oracle数据库中CLOB类型的示例代码: ```java import java.sql.*; import java.io.*; import oracle.jdbc.driver.OracleResultSet; import oracle.sql.CLOB; public class TestOracleClob ...

    oracle数据库的clob大字段在jdbc中的处理方式

    在Java中,当我们需要通过JDBC(Java Database Connectivity)接口与Oracle数据库交互时,处理CLOB字段可能会遇到一些挑战。这篇文档将详细阐述如何在JDBC中有效地读取和操作Oracle数据库的CLOB字段,并将其转换为...

    JDBC操纵Oracle数据库中的BLOB字段

    总结而言,使用JDBC操纵Oracle数据库中的BLOB字段,无论是通过现代的`setBinaryStream`方法还是古老的分步写入策略,都能有效实现对多媒体数据的高效管理。开发者应根据具体的应用需求和环境选择最合适的操作方式。

    oracle触发器实现二维码

    描述中提到,这个资源是通过Java代码生成二维码图片,然后利用触发器将生成的二维码图片转换为BLOB(Binary Large Object)格式,并将其存储到Oracle数据库的表中。BLOB类型字段用于存储非结构化的二进制数据,非常...

    Java与Oracle大字段读写(含代码)

    在这个主题中,我们将关注如何在Java中高效地读取和写入Oracle数据库中的大对象(LOB)字段,特别是BLOB类型的字段,同时提供相关的代码示例。 首先,我们需要理解Oracle中的BLOB类型。BLOB全称为Binary Large ...

    ORACLE数据库中插入大字段数据的解决方法

    在ORACLE数据库中插入大字段数据时,可能会遇到性能问题或者由于字段长度限制导致的错误。这类问题通常涉及LOB(Large Object)类型的字段,如CLOB(Character Large Object)和BLOB(Binary Large Object)。本篇...

    Oracle数据库实现BBS

    Oracle数据库在实现BBS(电子公告板系统)中扮演着核心角色,它是数据存储和管理的基石。BBS系统主要用于用户交互,如发布主题、回复、上传文件等,因此需要强大的数据库支持以确保数据的稳定性和高效性。下面将详细...

    在ORACLE数据库中如何对多媒体数据对象进行处理.pdf

    在Oracle数据库中处理多媒体数据对象是一项重要的任务,特别是在构建Web应用系统和电子商务平台时。这些系统经常需要高效地管理和检索大量的图像、声音、视频和文本等大数据对象。Oracle数据库为此提供了专门的支持...

    将EXCEL数据 插入ORACLE数据库

    4. **通过ODBC/JDBC接口**:在编程语言如Python、Java或VBA中,利用ODBC或JDBC驱动连接到Oracle数据库,读取Excel数据,然后执行SQL插入语句。这种方法适用于小规模的数据导入,或者需要结合其他业务逻辑的情况。 5...

    java将图片写入数据库,并读出来(blob clob)

    在Java编程中,有时我们需要将图像数据存储到数据库中,然后能够从数据库中读取出来。这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片...

    Oracle导出Clob,Blob工具

    在描述中提到的“Oracle导出Clob,Blob等大字段工具”就是为了解决这个问题而设计的,它是一个自编写的实用程序,方便用户导出和管理Oracle数据库中的大对象数据。 Oracle数据库中的Clob类型用于存储大量的文本数据...

    spring+hibernate操作oracle的clob字段

    在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB字段常被用来存储超过4000字节的信息。Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和...

    通过JDBC连接oracle数据库的十大技巧

    这种驱动完全由Java编写,无需额外安装客户端库,非常适合在Web应用环境中使用。 - **Oracle提供的选项**:Oracle提供了OCI (Oracle Call Interface) 和 Thin 驱动两种选择。OCI驱动依赖于本地客户端库,而Thin驱动...

    ODI LOB 类型KM

    这个KM主要用于对Oracle数据库中的LOB字段进行增量更新。在数据集成过程中,增量更新是必要的,特别是当源系统和目标系统之间有实时数据同步需求时。ODI的Incremental Update KM能够识别自上次同步以来发生变化的...

    java读写oracle的blob字段示例

    【Java读写Oracle BLOB字段】在Java编程中,与Oracle数据库交互时,有时需要处理存储大对象(LOB)的数据,比如图片、音频或大型文本文件。BLOB类型用于存储二进制大对象,本文将详细介绍如何使用Java来读取和写入...

    Oracle导出图片源代码

    总结来说,"Oracle导出图片源代码"是一个实现从Oracle数据库BLOB字段中提取并保存为图片文件的程序。它涉及到数据库连接、SQL查询、BLOB数据处理和文件操作等多个技术环节,是数据库管理和数据迁移的重要工具。理解...

Global site tag (gtag.js) - Google Analytics