- 浏览: 554334 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (533)
- spring (8)
- struts (21)
- hibernate (17)
- java其他 (73)
- 设计模式 (2)
- 开发软件/插件 (26)
- android (8)
- extjs4 (1)
- 网络编程 (4)
- 生活杂记 (3)
- ibatis (5)
- 应用服务器 (4)
- js (26)
- html/css (16)
- linux (0)
- db (32)
- jsp/servlet (13)
- xml (9)
- webservice (10)
- 错误/异常处理 (23)
- 线程 (10)
- maven (7)
- lucene (2)
- python (0)
- 报表 (1)
- mongodb (6)
- restful (6)
- ssl (1)
最新评论
-
zmwxiaoming:
...
struts2拦截器验证登陆状态 -
u012413283:
感谢楼主,同样的问题解决了
eclipse下安装m2e的maven插件报错的各类解决方案(含pom editor没装好的解决方案) -
javalucky:
你妹,想不吐槽都不行啊,eclipse 那来的maven4My ...
clipse加载maven工程提示pom.xml无法解析org.apache.maven.plugins:maven-resources-plugin: -
zhaoyh82:
感谢楼主
eclipse下安装m2e的maven插件报错的各类解决方案(含pom editor没装好的解决方案) -
hua2011:
按照楼主说的,还是没有出现pom editor编辑器,麻烦楼主 ...
eclipse下安装m2e的maven插件报错的各类解决方案(含pom editor没装好的解决方案)
oracle本身支持对大数据类型的各种处理,但是平常大家可能用的不多,其中clob(一般用于大类型的字符型的存取)和blob(一般用于大类型的二进制类型的存取)我想应该就是用的比较少的。所以我写下这篇博文,主要是对这两个数据类型的文件进行的操作,如,保存这类文件进入数据库,读取这类文件到本地磁盘。
本来按照老习惯是该先上效果图的,可惜我的机器现在巨卡,10g跑起来基本让我泪流满面,所以我就偷下懒,图就给省略了 -_-!
第一步,新建一个java项目(为啥是java项目而不是web呢,主要因为它便于测试,出效果也快...)orclTest
第二步,新建一个数据库连接的类,我这里是com.test.InitDB.java,代码如下:
class InitDB{
private static Connection con = null;
private static Statement stmt = null;
private static ResultSet rs = null;
//链接oracle数据库
InitDB()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@localhost:1521:YYSMID";
String user = "zhangsan";
String password = "Lc123456";
con = (Connection) DriverManager.getConnection(url, user, password);
InitDB.setCon(con);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void closCon()
{
try
{
con.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void stmt()
{
try
{
con.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void rs()
{
try
{
con.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static Connection getCon()
{
return con;
}
public static void setCon(Connection con)
{
InitDB.con = con;
}
public static ResultSet getRs()
{
return rs;
}
public static void setRs(ResultSet rs)
{
InitDB.rs = rs;
}
public static Statement getStmt()
{
return stmt;
}
public static void setStmt(Statement stmt)
{
InitDB.stmt = stmt;
}
}
第三步,以及接下来的几步,我们来分别编写clob和blob的插入数据库和读出数据库的代码,新建com.test.InsertBlobData.java,顾名思义,它是用来插入blob类型数据的类。代码如下:
class InsertBlobData{
private ResultSet rs = null;
private InitDB idb = null;
InsertBlobData()
{
idb = new InitDB();
}
public void insertBlob(String sql1) throws SQLException
{
Connection con = idb.getCon();
try
{
con.setAutoCommit(false);// 不设置自动提交
BLOB blob = null; // 插入空的Blob
PreparedStatement pstmt = con
.prepareStatement("insert into cdl_test(sid,img) values(?,empty_blob())");
pstmt.setString(1, "100");
pstmt.executeUpdate();
pstmt.close();
rs = con.createStatement().executeQuery(sql1);
while (rs.next())
{
System.out.println("rs length is:");
oracle.sql.BLOB b = (oracle.sql.BLOB) rs.getBlob("img");
System.out.println("cloblength is:" + b.getLength());
File f = new File("d:\\1.jpg"); //1.jpg一张QQ的截图
System.out.println("file path is:" + f.getAbsolutePath());
BufferedInputStream in = new BufferedInputStream(
new FileInputStream(f));
BufferedOutputStream out = new BufferedOutputStream(b
.getBinaryOutputStream());
int c;
while ((c = in.read()) != -1)
{
out.write(c);
}
in.close();
out.close();
}
con.commit();
}
catch (Exception e)
{
con.rollback();// 出错回滚
e.printStackTrace();
}
}
}
第四步,新建com.test.InsertClobData.java,用于插入clob数据类型的,代码如下:
class InsertClobData { private ResultSet rs = null; private InitDB idb = null; InsertClobData() { idb = new InitDB(); } public void insertClob(String sql1) throws SQLException { Connection con = idb.getCon(); try { con.setAutoCommit(false);// 不设置自动提交 BLOB blob = null; // 插入空的Clob PreparedStatement pstmt = con .prepareStatement("insert into cdl_test(sid,doc) values(?,empty_clob())"); pstmt.setString(1, "101"); pstmt.executeUpdate(); pstmt.close(); rs = con.createStatement().executeQuery(sql1); while (rs.next()) { System.out.println("sdfasdfas"); oracle.sql.CLOB cb = (oracle.sql.CLOB) rs.getClob("doc"); File f = new File("d:\\1.txt"); //1.txt一本小说《风云》马荣成 System.out.println("file path is:" + f.getAbsolutePath()); BufferedWriter out = new BufferedWriter(cb .getCharacterOutputStream()); BufferedReader in = new BufferedReader(new FileReader(f)); int c; while ((c = in.read()) != -1) { out.write(c); } in.close(); out.close(); } con.commit(); } catch (Exception e) { con.rollback();// 出错回滚 e.printStackTrace(); } } }
第五步,新建com.test.ReadBlobData.java,用于读取blob类型的数据,代码如下:
class ReadBlobData { private ResultSet rs = null; private InitDB idb = null; ReadBlobData() { idb = new InitDB(); } public void getBlob(String sql2) throws SQLException { Connection con = idb.getCon(); con.setAutoCommit(false); try { System.out.println("sq2 is:" + sql2); System.out.println("stmt is:" + con); rs = con.createStatement().executeQuery(sql2); while (rs.next()) { System.out.println("rs length is:"); Blob b = (Blob) rs.getBlob("img"); File f = new File("D:\\1.jpg"); FileOutputStream fos = new FileOutputStream(f); InputStream is = b.getBinaryStream();// 读出数据后转换为二进制流 byte[] data = new byte[1024]; while (is.read(data) != -1) { fos.write(data); } fos.close(); is.close(); } con.commit();// 正式提交 } catch (Exception e) { e.printStackTrace(); } finally { // rs.close(); } } }
第六步,新建com.test.ReadClobData.java,用于读取clob类型的数据,代码如下:
class ReadClobData { private ResultSet rs = null; private InitDB idb = null; ReadClobData() { idb = new InitDB(); } public void getClob(String sql2) throws SQLException { Connection con = idb.getCon(); try { con.setAutoCommit(false);// 不设置自动提交 System.out.println("sq2 is:" + sql2); rs = con.createStatement().executeQuery(sql2); while (rs.next()) { oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("doc"); File f = new File("d:\\1.txt"); BufferedReader in = new BufferedReader(clob .getCharacterStream()); // setCharacterStream()方法,可用于将CLOB字段与字节流相关联, BufferedWriter out = new BufferedWriter(new FileWriter(f)); int c; while ((c = in.read()) != -1) { out.write(c); } out.close(); in.close(); } con.commit();// 正式提交 rs.close(); } catch (Exception e) { e.printStackTrace(); con.rollback(); } } }
最后,就是新建测试类了,每每用着main方法,我就感觉这世界是多么的有爱啊,junit什么的,最讨厌了.....
public class TestBlob_Clob { public static void main(String[] args) { String sql1 = "select * from cdl_test for update";// 悲观锁锁定需更新的行 String sql2 = "select * from cdl_test"; System.out.println("\t\t\t欢迎使用:"); System.out.println("1:插入图片"); System.out.println("2:插入文本"); System.out.println("3:读取图片"); System.out.println("4:读取文本"); System.out.println("5:退出"); System.out.println("请选择:"); while (true) { try { Scanner sc = new Scanner(System.in); int i = sc.nextInt(); System.out.println("sss:" + i); switch (i) { case 1: InsertBlobData isd = new InsertBlobData(); //插入图片 isd.insertBlob(sql1); break; case 2: InsertClobData icd = new InsertClobData(); //插入小说 icd.insertClob(sql1); break; case 3: ReadBlobData rb = new ReadBlobData(); //得到图片 rb.getBlob(sql2); break; case 4: ReadClobData rc = new ReadClobData(); //得到小说 rc.getClob(sql2); break; case 5: System.exit(0); } } catch (Exception e) { e.printStackTrace(); } } } }
发表评论
-
聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered Index)
2014-02-17 09:54 1033索引的重要性数据库性能优化中索引绝对是一个重量级的因素,可 ... -
数据库中索引的优缺点
2014-02-17 09:46 406一、索引的概念 索 ... -
将一张表的查询结果插入到另一张表
2013-12-10 16:18 726代码 方法一: 1 select into 和 in ... -
ORACLE中NOT IN 的替代
2013-10-08 10:34 887查询哪些书没有借出? 典型的查询方式为: SELECT ... -
Oracle group by 用法实例详解
2013-09-29 16:59 1020Group by的语法 Select [fi ... -
oracle用sum函数实现累加
2013-09-29 16:55 890====================Questio ... -
oracle sum()over函数的使用
2013-09-29 16:49 923oracle sum()over函数的使用 over ... -
项目从oracle迁移到sqlserver后,代码中分页的相对改动
2013-09-29 16:43 700场景是一个后台的管理项目,突然要把数据库从 ... -
Sql Server 数据分页
2013-09-29 16:18 7641.引言 在列表查询时由于数据量非常多,一次性查出来会非常 ... -
Oracle高级应用之解锁表
2013-08-24 00:54 815每篇一笑:老鼠去方 ... -
Oracle高级应用之合并MERGE
2013-08-24 00:55 915为了方便大家学习和测试,所有的例子都是在Oracle自带用 ... -
Oracle高级应用之物化视图(materialized view)
2013-08-24 00:55 2190原文地址:http://hi.baidu.com/guke ... -
Oracle高级查询之GROUP BY
2013-08-22 11:44 828开篇一笑:两个男人在饭店里边吃饭边聊天,甲:“我不得不在这儿 ... -
Oracle高级应用之去重聚合函数
2013-08-22 11:41 931开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车。我 ... -
巧用rownum查询连续季度
2013-08-22 11:40 506下面可以说是这类查询的一个模版SQL,如果大家在工作中碰到类 ... -
Oracle高级查询之CONNECT BY
2013-08-22 11:39 798为了方便大家学习和测试,所有的例子都是在Oracle自带用户 ... -
oracle获取当前年月日时分秒季度周
2013-08-13 11:50 1732oracle中如何获取系统当前时间 select to ... -
oracle去重
2013-06-21 15:09 1242我们在实际工作中,当信息系统数据质量不高的时候,可能存在数据 ... -
java.sql.SQLException: ORA-00911: invalid character 解决方法(转)
2013-06-20 17:04 1124控制台抛出这个异常:java.sql.SQLExcepti ... -
MySQL system variable 'max_allowed_packet' is set to (1MB).
2013-06-14 14:10 1662安装opencms使用mysql数 ...
相关推荐
在Oracle数据库中,CLOB(Character Large Object)和BLOB(Binary Large Object)是用来存储大量文本数据和二进制数据的特殊数据类型。CLOB用于存储大文本数据,如长篇文章或XML文档,而BLOB则用于存储图像、音频、...
在Java的持久化框架Hibernate中,处理大数据类型如Clob(Character Large Object)和Blob(Binary Large Object)是一项常见的任务。这些数据类型通常用于存储大量的文本数据(Clob)和二进制数据(Blob),例如长篇...
在Java的持久化框架Hibernate中,处理大数据类型如Oracle数据库中的Clob(Character Large Object)和Blob(Binary Large Object)字段是一项重要的任务。Clob通常用于存储大量的文本数据,而Blob则适用于二进制...
【描述】: 本文主要探讨了在Visual C++(VC)环境下,利用Oracle Objects for OLE(OO40)来高效处理Oracle数据库中的大数据类型,如Long raw、BLOB、CLOB等。这种方法相比传统的ODBC中间件,具有更快的速度和更高的...
Oracle数据库系统支持对大型数据对象(LOBs,Large Objects)的操作,这包括BLOB、CLOB、NCLOB和BFILE四种类型。每种类型都有其特定的用途和特性,适用于存储不同类型的大数据。 1. BLOB(Binary Large Object): ...
Oracle数据库系统支持多种复杂的数据类型,其中包括BLOB(Binary Large Object),用于存储非结构化的大数据,如图片、音频或视频文件。而MySQL同样提供了BLOB类型,用于相似的用途。本篇将详细讲解如何在Oracle与...
Oracle数据库在处理大数据字段时,提供了CLOB(Character Large Object)类型,用于存储大量文本数据。CLOB类型是LOB家族的一员,与BLOB(Binary Large Object)不同,它专门用于存储字符集相关的数据,比如文档、...
在Java的持久化框架Hibernate中,处理大数据类型如BLOB(Binary Large Object)和CLOB(Character Large Object)是一项常见的任务。BLOB用于存储二进制数据,如图片、视频或文档,而CLOB则用于存储大文本数据,如...
- 使用Blob/Clob接口:直接操作Clob接口进行读写,而不是将其转换为字符串或其他数据类型,以减少转换开销。 通过以上内容,你应该对在Hibernate中动态映射Oracle 10g的CLOB类型有了深入理解,这将帮助你在实际...
在Oracle数据库中,BLOB(Binary Large Object)和CLOB(Character Large Object)是两种用于存储大量数据的特殊字段类型。本篇文章将深入剖析如何使用MyBatis框架在Oracle数据库中对BLOB类型字段进行保存和读取。 ...
在Oracle数据库系统中,Blob和Clob是两种特殊的数据类型,用于存储大对象(Large Object)。Blob主要用于存储二进制数据,如图片、视频或文档,而Clob则用于存储字符型的大数据,如长篇文本或XML文件。本篇文章将...
Oracle提供了诸如BFILE、CLOB(Character Large Object)和NCLOB(National Character Large Object)等数据类型来处理不同类型的大数据对象。BFILE允许存储在操作系统文件系统上的大型二进制文件,而CLOB和NCLOB则...
同时,确保数据库支持高效的BLOB和CLOB操作,比如Oracle的BFILE类型或使用流式处理。 总之,Hibernate提供了对BLOB和CLOB的便利支持,允许开发者在Java应用中轻松地处理大数据对象,从而实现与数据库的高效交互。...
【Oracle 数据库与大数据字段操作】Oracle 数据库是关系型数据库的一种,被广泛应用于存储和管理各种类型的数据,包括图像、音频、视频等大数据量的信息。这些数据通常以大数据字段的形式存储,如 BFile、BLOB...
在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB字段常被用来存储超过4000字节的信息。Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和...
- **BLOB数据**:BLOB用于存储二进制大数据,可以使用`UTL_FILE`包或`DBMS_LOB`包的函数将BLOB内容写入文件,然后在目标数据库中读取并插入。 ### CLOB和BLOB的处理方法 1. **CLOB导出**:创建存储过程,将CLOB...
在实际开发中,推荐使用BLOB和CLOB字段来存储大数据,以充分利用Oracle数据库对大对象的支持和优化。 总之,OO4O提供了一种高效且灵活的方法来处理Oracle数据库中的大数据字段,使得在VC++环境下进行大数据操作变得...