- 浏览: 503527 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (285)
- 数据库 (49)
- dwr (1)
- js (35)
- security (6)
- freemaker (4)
- 网站建设 (15)
- css (5)
- javaEE (56)
- 生活点滴 (12)
- 安装与配置 (16)
- ssh2 (13)
- 开源软件 (6)
- web 应用服务器 (6)
- 开发模式和设计模式 (2)
- linux (5)
- 项目管理 (7)
- 计算机杂症 (0)
- appScan (1)
- idea (3)
- android (1)
- java @override 报错处理 (1)
- lucene (5)
- java (2)
- groovy (1)
- Extjs (7)
- asp (2)
- php (2)
- Memcached (1)
- 名言 (1)
- 面试 (1)
- Jmeter (0)
- 微信支付 (1)
- app开发 (1)
- branch分支合并到trunk主干 (1)
- 自动化测试 (1)
- springClond (1)
- ELK (2)
最新评论
-
skykufo:
坑爹啊,我也因为写多了一个div,在ie8浪费了一天
jQuery加载(load、get、post)页面显示空白原因 -
yeyinzhu3211:
帅哥,我想问下,是怎么去除呀?能详细说明下吗?
IntelliJ IDEA 10.5.1 无法断点或停止不动 -
sshitaime:
怎么下载不了啊,能给我一个安装包吗
oracle 10g透明网关组件下载地址(新) -
fuanyu:
xiaohuafyle 写道被你的头像吓尿了 哥们有这么可怕呀 ...
netstat -aon -
wanlt_software:
谢谢。。。。。
oracle 10g透明网关组件下载地址(新)
最近学Oracle,正好单位OA中Word文件是将文件用BASE64方式编码后用CLOB型写入数据库的,因此有心测试JDBC对CLOB型的操作(百度的排版好像不太好用,凑合看吧)。
准备工作:
一、去http://commons.apache.org/codec/下载BASE64的编解码包
二、去http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html下载10G以后的ojdbc14.jar,用9i自带的的ojdbc14.jar在使用第二种方法的时候不能超过4000字节
三、登录到Oracle,将hr用户解锁,建立测试表test,SQLPLUS怎么用俺就不说了
conn / as sysdba;
alter user hr account unlock;
alter user hr identified by hr;
create table test(c1 varchar2(10),t1 clob);
四、建立JAVA程序
import java.io.IOException;
import java.io.*;
import java.sql.*;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.EncoderException;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Base64Encode {
public static void main(String[] args) throws EncoderException,
DecoderException, IOException, SQLException {
//打开文件
FileInputStream fsin=new FileInputStream("oracle 体系结构.doc");
//看看可以读出多少字节
int fbytes=fsin.available();
//请求分配内存并读入文件到inbuf
byte[] inbuf=new byte[fbytes];
fsin.read(inbuf);
//关闭文件
fsin.close();
//新建一个BASE64编解码对象
Base64 base64 = new Base64();
//对inbuf中的内容进行编码
byte[] bytes = base64.encode(inbuf);
//测试写入数据库
dbwriter.writedb(bytes);
//从数据库读取数据
bytes=dbwriter.readdb();
//将读到的数据解码
byte[] outbuf=base64.decode(bytes);
//将解码后的数据输出到文件output.doc
FileOutputStream fsout=new FileOutputStream("output.doc");
fsout.write(outbuf);
fsout.flush();
fsout.close();
}
}
class dbwriter{
static Connection conn;
//方法一和方法二只能选一个编译
//方法一:使用游标对CLOB型进行操作,此方法网上流传甚广,虽然正确,但无比麻烦,对数据库的操作也很啰嗦
static void writedb(byte[] arg) throws SQLException,IOException
{
// 使用Class对象的forName方法动态加载类
try
{
Class.forName ("oracle.jdbc.driver.OracleDriver");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
//连接Oracle
conn = DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:student", "hr", "hr");
// @machine:port:SID, userid, password
//关闭自动提交,JDBC默认竟然是自动提交,嘿嘿,如果不关闭自动提交,后面更新数据时会出现更新顺序错误,ORACLE的错误号不记得了
conn.setAutoCommit(false);
//插入一行数据,必须先插入一个空的CLOB数据,便于后面获取CLOB的locator
PreparedStatement stmt = conn.prepareStatement("insert into test(c1,t1) values ('1',empty_clob())");
stmt.executeUpdate();
//注意SQL语句中的For update,使游标可更新,我对JAVA不熟,应该这样就是可更新游标了吧
stmt=conn.prepareStatement("select t1 from test where c1=? for update");
stmt.setString(1,"1");
ResultSet rset=stmt.executeQuery();
rset.next();
oracle.sql.CLOB lclob=(oracle.sql.CLOB)rset.getClob("t1");
//从CLOB型获取写入流
OutputStream writer = lclob.getAsciiOutputStream();
//将数据写入CLOB
writer.write(arg);
//关闭写入流
writer.close();
//提交等维护工作
conn.commit();
rset.close();
stmt.close();
conn.close();
}
//方法二:使用preparedStatement.setString()方法,比第一种方法简单清楚太多,推荐
static void writedb(byte[] arg) throws SQLException,IOException
{
// 使用Class对象的forName方法动态加载类
try
{
Class.forName ("oracle.jdbc.driver.OracleDriver");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
conn = DriverManager.getConnection
("jdbc:oracle:thin:@127.0.0.1:1521:student", "hr", "hr");
// @machine:port:SID, userid, password
conn.setAutoCommit(false);
PreparedStatement stmt = conn.prepareStatement("insert into test(c1,t1) values ('1',?)");
stmt.setString(1,new String(arg)); //要用10g以后的ojdbc14.jar
stmt.executeUpdate();
conn.commit();
stmt.close();
conn.close();
}
//读数据库的方法
static byte[] readdb() throws SQLException,IOException
{
// 使用Class对象的forName方法动态加载类
try
{
Class.forName ("oracle.jdbc.driver.OracleDriver");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
conn = DriverManager.getConnection
("jdbc:oracle:thin:@127.0.0.1:1521:student", "hr", "hr");
// @machine:port:SID, userid, password
conn.setAutoCommit(false);
PreparedStatement stmt=conn.prepareStatement("select t1 from test where c1=?");
stmt.setString(1,"1");
ResultSet rset=stmt.executeQuery();
rset.next();
String ls=rset.getString("t1");
byte[] rslt=ls.getBytes();
rset.close();
stmt.close();
conn.close();
return rslt;
}
}
from http://hi.baidu.com/yangyee/blog/item/e8e086ed7e5a1b3cacafd5c9.html
发表评论
-
java 模拟微信浏览器http请求
2020-12-16 08:49 915public static void main(St ... -
java 小数点处理的问题
2015-08-22 16:23 778float num= (float)1/100 ... -
java操作excel 替换指定字符串
2014-12-26 10:27 5301根据excel模板里设置指定的num0,num1,num2 ... -
itext对水印图片的旋转、放大、缩小等操作的示例
2014-07-24 17:17 5795package test1; import java. ... -
java 获取ip
2014-04-25 16:38 857public static String getIpAddr ... -
读取poi
2014-03-12 17:57 1331/** * Writer: fuanyu * Dat ... -
对Map排序
2014-02-20 15:38 785本来来自:http://blog.sina.com.cn/s ... -
java 上下篇文章实现的思路
2014-02-14 15:03 788当前文章的ID =request("id" ... -
Java:String和Date、Timestamp之间的转换
2013-12-03 14:39 10431.1 String -> Date String ... -
ArrayList和数组间的相互转换
2012-07-31 16:00 1113package test.test1; import ... -
No result defined for action and result
2012-07-02 11:50 1006当你在用struts2开发时,如果,从页面跳入action时, ... -
IntelliJ IDEA 10.0 使用javac 编译程序出现“非法字符: \65279 ”解决方法
2012-04-26 11:42 2175一、问题描述: 将在eclipse 创建的项目代码导入 I ... -
map取key及key的值
2012-03-19 15:53 1640public class Test2 { p ... -
java @override 报错处理
2012-02-02 14:14 1346有时候在自己电脑上编译通过的java代码,在别人那里确编译 ... -
Java判断字符串中是否包含汉字
2011-12-15 11:54 2288有两个方法 import java.util.regex.M ... -
JMagick+ImageMagic处理图片(高质量)
2011-11-27 13:37 2690项目需要简单处理一些用户上传的图片,如缩略图、剪切、旋转、水印 ... -
定时发送邮件的思路
2011-11-19 12:11 1303定时发送邮件:大概是用户选择在某个时间发送邮件; 步骤: ... -
java 解析json
2011-11-10 17:00 1128如下面代码 String str="[{'bus ... -
javamail 收邮件遇到的问题及解决方法
2011-11-04 16:29 22931.java.io.UnsupportedEncodingEx ... -
java 获取文件夹大小,文件大小,文件个数
2011-08-17 14:27 1717import java.io.File; import ja ...
相关推荐
在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object...`ClobAndBlob`工具提供了一种便捷的方式来体验和比较这两种方式的使用效果。
这是因为 WebLogic 服务器为了更好地管理和操作数据库连接,会使用自己的包装类 `weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB` 来表示 CLOB 类型的数据,而不是直接使用 Oracle 提供的标准 `oracle.sql.CLOB` 类。...
正确地理解和使用这两种类型对于开发能够高效处理大量数据的应用程序至关重要。 #### 二、Apache Derby简介 Apache Derby是一款高质量、纯Java的嵌入式关系数据库引擎,由IBM捐赠给开源社区。Derby基于文件系统,...
在JDBC中,对CLOB数据类型的操作主要包括读取和写入操作。 读取CLOB数据 读取CLOB数据主要通过Java.sql.Clob接口实现。下面是一个基本的读取CLOB数据的示例代码: ```java Connection con = ConnectionFactory....
本文将详细介绍如何使用JDBC来操作Blob和Clob对象,包括创建含有Blob和Clob字段的表、插入和读取Blob/Clob数据的具体步骤。 #### 二、Derby简介 Apache Derby是一款高质量的、纯Java的嵌入式关系数据库引擎。它...
JAVA对CLOB的操作 在JAVA中,操作Oracle数据库中的BLOB和CLOB类型字段是一种常见的需求。...通过JDBC和JNDI两种方式可以实现入库和出库操作,但是在实现时需要注意强制转换对象的类型,以便正确地操作BLOB和CLOB字段。
这篇博客主要探讨了如何使用Spring处理CLOB(Character Large Object)和BLOB(Binary Large Object)这两种大数据类型的字段。CLOB通常用于存储大文本数据,如文章、报告等,而BLOB则用于存储二进制大数据,如图片...
这两种类型用于存储大量的文本数据(CLOB)和二进制数据(BLOB),例如图片、文档或音频文件。在JDBC(Java Database Connectivity)中,我们可以使用特定的方法来操作这些类型的数据。 首先,我们需要建立与数据库...
由于Clob字段通常用于存储大量文本数据,如果使用传统的JDBC方式处理,代码将会相当复杂。但随着数据库技术的发展,越来越多的数据库厂商提供了更加简单的方式来操作这些大字段。例如,Oracle数据库提供了支持以...
这篇文章主要讲解了如何使用`JDBC`和`Hibernate`这两种不同的方式来处理`CLOB`和`BLOB`字段。 1. **数据库中的`CLOB`与`BLOB`类型** - 在MySQL中,`CLOB`对应`TEXT`类型,`BLOB`对应`BLOB`类型。 - 在DB2或Oracle...
在Hibernate中,Clob类型的字段通常有两种处理方式: 1. **传统JDBC方式**: 在这种模式下,开发者需要直接操作Clob对象,通过PreparedStatement的setClob方法设置Clob值,通过ResultSet的getClob方法获取Clob值。...
- 创建`CLOB`对象通常有两种方式:从输入流创建或通过字符串创建。 4. **读取CLOB数据** - 使用`Clob.getSubString()`方法可以从`CLOB`中提取指定位置的子字符串。 - `Clob.length()`返回`CLOB`的长度,`Clob....
Clob数据则用`GET_LENGTH`和`SUBSTR`操作。 4. **更新数据**: 更新Blob和Clob数据通常涉及先清除现有数据(`DBMS_LOB.CLEAR`),然后重新插入。也可以直接使用`DBMS_LOB.WRITE`或`DBMS_LOB.CHANGE_LENGTH`进行...
例如,使用Java的JDBC操作Oracle数据库中的Clob字段: ```java // 假设已有连接conn和PreparedStatement ps String sql = "INSERT INTO table_name (clob_column) VALUES (?)"; ps.setClob(1, new java.io.String...
最后,介绍`Blob`和`Clob`两种高级数据类型,并提供多个示例展示其具体应用。 #### 三、工具与代码片段 教程提供了大量代码片段,帮助理解并实践各种高级操作,包括但不限于: - **数据库创建与设计**:指导如何...
在Oracle数据库系统中,Blob和Clob是两种特殊的数据类型,用于存储大对象(Large Object)。Blob主要用于存储二进制数据,如图片、视频或文档,而Clob则用于存储字符型的大数据,如长篇文本或XML文件。本篇文章将...
这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储字符数据,比如长文本。以下是如何使用Java处理...
Clob(Character Large OBject)类型和 Blob(Binary Large OBject)类型是数据库中两种常用的大规模数据类型。Clob 类型用于存储大规模的字符数据,而 Blob 类型用于存储大规模的二进制数据。在 Java 中,处理 Clob...
这篇文章将详细讲解如何在Hibernate中保存这两种特殊类型的数据。 BLOB用于存储二进制大对象,如图片、音频或视频文件等;而CLOB则用于存储字符型的大数据,例如长文本、XML文档等。在Java中,Blob和Clob是JDBC API...