- 浏览: 159890 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
panamera:
MQ服务器没有启动,消息生产者一直等待,不会报连接异常,这个问 ...
Spring3 JmsTemplate与MQ的集成 -
lanbo316:
[/size][align=left][size=xx-lar ...
Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 -
fatalfeel:
Irrlicht 3d Engine is full open ...
Android世界的15款开源的游戏开发引擎 -
yakecjh:
哥们能份这个示例的代码给我么,我是北京科瑞明的,我现在正要做M ...
Spring3 JmsTemplate与MQ的集成 -
ma860709:
除了配置~能列一下配置的属性的意思还有代码的实现吗?
Spring3 JmsTemplate与MQ的集成
JDBC复习
JDBC驱动程序的类型:
JDBC-ODBC桥;部分本地API,部分JAVA驱动程序;JDBC网络纯JAVA驱动程序;本地协议纯JAVA驱动程序。
最后一种是访问数据库效率最高的。目前应用最多的也是这种。
不同数据库的连接URL如下:
sqlserver:jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs
ORACLE:jdbc:oracle:thin:@localhost:1521:ORCL
mysql:jdbc:mysql://localhost:3306/databasename
CallableStatement对象用于执行SQL存储过程。
CallableStatement cstmt = conn.prepareCall("call p_changesal(?,?)");
cstmt.registerOutParameter(2, java.sql.Types.INTERGER);//注册OUT类型的返回参数
cstmt.setInt(1, 98);
cstmt.execute();
int sal = cstmt.getInt(2);
可以调用ResultSet.getMetaData()方法来获取ResultSetMetaData对象,再获取元数据。
一个Statement对象在同一时刻只有一个打开的ResultSet对象,在Statement接口中定义的所有executeXXX()方法都隐含地关闭Statement当前的ResultSet对象。如果你要执行多个查询语句,并且需要同时对它们的结果集进行操作,那么你必须使用多个Statement对象。
连接池技术预先建立多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到时,从池中取出一个连接对象为客户服务,请求完成后,客户程序调用close()方法,将连接对象放回池中。
常用端口:ftp:21 telnet:23 oracle:1521 mysql:3306 sqlserver:1433
注册数据库驱动的3种方式:
1,Class.forName( driverName ) 如:Class.forName("oracle.jdbc.driver.OracleDriver"):
2,Driver drv = new DriverConstructor();
DriverManager.registerDriver(drv);
如:Driver drv = new Oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver( drv );
3,java -Djdbc.drivers = oracle.jdbc.driver.OracleDriver;这种方式只能注册一个driver,命令行注册方式
方法1最好
建立连接3种方式:
getConnection( String url ) //匿名访问
getConnection( url, Properties info) //要一个properties对
getConnection( url, username, password) //最常用
PreparedStatement继承自Statement
Statement 1,不适合有多个参数的SQL;2,不适合重复执行同构的SQL
Statement tem = conn.createStatement();
PreparedStatement pstm = conn.prepareStatement("select * from t_user where id = ?");
pstm.setString(1, "21"); //下标从1开始
pstm.executeQuery();
CallableStatement:专用于调用服务器的存储过程
Statement里的方法:
executeQuery( sql ) 返回ResultSet
execute( sql ) 返回boolean,是否有ResultSet返回
executeUpdate( sql ) 返回int,影响的记录行数
字符转换:
java -------------> oracle:ISO-8859-1
Unicode:gb2312(GBK)
如:String name = "张三";
gb2312---->ISO-8859-1:
String newName = new String(name.getBytes("gb2312"), "ISO-8859-1");
ISO-8859-1------->gb2312:
String newName = new String(name.getBytes("ISO-8859-1"), "gb2312");
从ResultSet里面取值:
while(rs.next()){
String name = rs.getString("name");
}
关闭:
if(null != rs){
try{
rs.close();
}catch(Exception e){
}
}
statement,connection一样要先判断非空,后关闭
SQLWarning:理论上的,不影响程序执行,不用处理;
SQLException里的方法:getErrorCode:返回错误码;getMessage:返回错误信息
元数据:DatabaseMetaData,ResultSetMetaData
conn.getMetaData(); rs.getMetaData();
查看数据库中表的信息
事务处理流程:
1,关闭自动提交;2,执行操作;3,处理数据;rollback或commit;4,打开自动提交
commit不仅是原有事务的结束,也是新事务的开始。
并发控制:
事务级别:transaction_none; transaction_read_uncommitted(默认); transaction_read_committed:解决脏读dirty read
transaction_repeateable_read:解决不可重复读的问题:non_repeated read
transaction_serializable:解决幻读:phantom read
oracle只支持read_commit和serializable
例如:conn.setTransactionIsolation( Connection.TRANSACTION_READ_COMMITTED );
回滚集的问题:
CONCUR_READ_ONLY, CONCUR_UPDATEABLE:
用来指定可不可以修改数据库:
TYPE_FORWARD_ONLY 默认
TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENITIVE
用来指定Result能不能滚动
可以用refreshRow刷新当前行。
例:Statement stm = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATEABLE);
定位方法:全部返回boolean,除afterLast(), beforeFirst()复位,返回void
absolute(int row) 传输绝对定位
first(), last(), next(), previous()向前一位
relative(int ) 相对定位
isAfterLast(), isBeforeFirst(), isFirst(), isLast();
注意:指针一开始是指在第一行的前面。
可更新结果集:
rs.updateInt(1, 9911); //更新当前行
rs.updateString("name", "tony");
rs.updateRow(); //修改生效,不调用则无效
rs.absolute(10);
rs.deleteRow(); //删除第10条记录
rs.cancelRowUpdates(); //放弃修改,删除还是会生效
插入新行
rs.moveToInsertRow(); //创建一个空记录
rs.updateInt("id", 11);
rs.updateString("name", "rose");
rs.insertRow();
rs.moveToCurrentRow(); //修改生效
rs没有主键则不能插入数据,必须包含所有的无默认值的非空字段,只能查一个表,不能连接查询,查询结果必须包含主键
如果是插入的话,必须选择表中所有不能为空的列。
批量处理:batch
con.setAutoCommit(false); //关闭自动提交
Statement stm = con.createStatement();
stm.addBatch("insert into t_user(id) value(11)");
stm.addBatch(" ... ");
int[] results = stm.executeBatch(); //返回所有成功的操作结果
con.commit();
con.setAutoCommit(true); //恢复自动提交
高级数据类型:
Blob ------ SQL Blob //大二进制对象 binary large object
Clob ------ SQL Clob //大文本二进制对象character large object
Array ----- SQL Array
Struct ---- SQL structure Type
Ref ------- SQL REF
方法:getXXX, setXXX, updateXXX
步骤:1,获得数据库连接,2,向表中插入一个空的Blog字段,3,获得Blob的输出流,4,通过输入流将数据写入数据库
如:
try{
conn.setAutoCommit(false);
Blob blob = null;
PreparedStatement pstm = conn.prepareStatement("insert into t_blob(id,filename,blobData) value
(?,?,empty_blob())"); //empty_blob()函数由oracle提供,用来创建空对象
pstm.setInt(1,10);
pstm.setString(2,"d:/hello.mp3");
pstm.executeUpdate(); //插入空值
pstm.close();
pstm = conn.prepareStatement("select blobData from u_blob where filename = ? for update"); //for update
同步必须使用,只能在查询时使用
pstm.setString(1, "d:/hello.mp3");
rs = pstm.executeQuery();
if(rs.next()){
Blob b = rs.getBlob();
oracle.sql.BLOB ob = (oracle.sql.BLOB)b;
OutputStream os = ob.getBinaryOutputStream();
InputStream is = new FileInputStream("d:/hello.mp3");
byte[] buffer = new byte[4096];
int len = 0;
while(true){
len = is.read(buffer);
if(-1 == len) break;
os.write(buffer, 0, len);
}
is.close();
os.close();
conn.commit();
}
}catch(Exception e){
conn.rollback();
}finally{
}
查询:
conn.setAutoCommit(false);
pstm = conn.prepareStatement("select blobData from u_blob where name = ? for update");
rs = pstm.executeQuery();
if(rs.next()){
blob b = rs.getBlob(1);
InputStream is = b.getBinaryStream();
OutputStream os = new FileOutputStream(path);
byte[] bb = new byte[4096];
int len = 0;
while(true){
len = is.read(bb);
if(len == -1) break;
os.write(bb, 0, len);
}
}
DataSource
WebLogic:services----->JDBC---->connection pool
JNDI:java naming directory interface api
用DataSource建立connection步骤:1,获得数据库连接,2,支持连接池,3,通常可以支持JNDI,4,支持分布式事务
OID:object id:对象在数据库中的ID
OOAD:object orient analyze and design面向对象的分析与设计
ODBC:open database connectivity:开放的数据库连接
JDBC:java database connectivity:java数据库连接
JDBC驱动程序可分为4类:
1,JDBC-ODBC桥; 2,部分本地API,部分JAVA驱动程序; 3,JDBC网络纯JAVA驱动程序; 4,本地协议纯JAVA驱
动程序,这个效率最高
Driver接口:
SQLSERVER:com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://IP:1433;数据库名,用户名,密码
MySQL:com.mysql.jdbc.Driver
jdbc:mysql://IP:3306/数据库名,用户名,密码
DB2:com.ibm.db2.jdbc.app.DB2Driver()
jdbc:db2://IP:端口/数据库名,用户名,密码
oracle:jdbc:oracle:thin:@IP:PORT,DBname,user,password
pointbase:jdbc:pointbase:server://ip:port,dbname,user,password
com.pointBase.jdbc.jdbcUniverSqlDriver
DriverManager类是驱动程序管理器类,所有方法都是静态的,一个statement对象在同一时刻只有一个打开的ResultSet对象,在
statement接口中定义的所有executeXXX()方法都隐含地关闭statement当前的ResultSet对象,如果你要执行多个查询语句,并且需
要同时对它们的结果集进行操作,那么你必须使用多个statement对象。
DataSource例子:
javax.naming.context ctx = new javax.naming.InitialContext();
//JNDI名是相对于java:comp/env上下文的,因此在程序中利用JNDI名查询数据源对象时,要加上java:comp/env/
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("java:comp/env/bookstore");
java.sql.Connection conn = ds.getConnection();
JDBC驱动程序的类型:
JDBC-ODBC桥;部分本地API,部分JAVA驱动程序;JDBC网络纯JAVA驱动程序;本地协议纯JAVA驱动程序。
最后一种是访问数据库效率最高的。目前应用最多的也是这种。
不同数据库的连接URL如下:
sqlserver:jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs
ORACLE:jdbc:oracle:thin:@localhost:1521:ORCL
mysql:jdbc:mysql://localhost:3306/databasename
CallableStatement对象用于执行SQL存储过程。
CallableStatement cstmt = conn.prepareCall("call p_changesal(?,?)");
cstmt.registerOutParameter(2, java.sql.Types.INTERGER);//注册OUT类型的返回参数
cstmt.setInt(1, 98);
cstmt.execute();
int sal = cstmt.getInt(2);
可以调用ResultSet.getMetaData()方法来获取ResultSetMetaData对象,再获取元数据。
一个Statement对象在同一时刻只有一个打开的ResultSet对象,在Statement接口中定义的所有executeXXX()方法都隐含地关闭Statement当前的ResultSet对象。如果你要执行多个查询语句,并且需要同时对它们的结果集进行操作,那么你必须使用多个Statement对象。
连接池技术预先建立多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到时,从池中取出一个连接对象为客户服务,请求完成后,客户程序调用close()方法,将连接对象放回池中。
常用端口:ftp:21 telnet:23 oracle:1521 mysql:3306 sqlserver:1433
注册数据库驱动的3种方式:
1,Class.forName( driverName ) 如:Class.forName("oracle.jdbc.driver.OracleDriver"):
2,Driver drv = new DriverConstructor();
DriverManager.registerDriver(drv);
如:Driver drv = new Oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver( drv );
3,java -Djdbc.drivers = oracle.jdbc.driver.OracleDriver;这种方式只能注册一个driver,命令行注册方式
方法1最好
建立连接3种方式:
getConnection( String url ) //匿名访问
getConnection( url, Properties info) //要一个properties对
getConnection( url, username, password) //最常用
PreparedStatement继承自Statement
Statement 1,不适合有多个参数的SQL;2,不适合重复执行同构的SQL
Statement tem = conn.createStatement();
PreparedStatement pstm = conn.prepareStatement("select * from t_user where id = ?");
pstm.setString(1, "21"); //下标从1开始
pstm.executeQuery();
CallableStatement:专用于调用服务器的存储过程
Statement里的方法:
executeQuery( sql ) 返回ResultSet
execute( sql ) 返回boolean,是否有ResultSet返回
executeUpdate( sql ) 返回int,影响的记录行数
字符转换:
java -------------> oracle:ISO-8859-1
Unicode:gb2312(GBK)
如:String name = "张三";
gb2312---->ISO-8859-1:
String newName = new String(name.getBytes("gb2312"), "ISO-8859-1");
ISO-8859-1------->gb2312:
String newName = new String(name.getBytes("ISO-8859-1"), "gb2312");
从ResultSet里面取值:
while(rs.next()){
String name = rs.getString("name");
}
关闭:
if(null != rs){
try{
rs.close();
}catch(Exception e){
}
}
statement,connection一样要先判断非空,后关闭
SQLWarning:理论上的,不影响程序执行,不用处理;
SQLException里的方法:getErrorCode:返回错误码;getMessage:返回错误信息
元数据:DatabaseMetaData,ResultSetMetaData
conn.getMetaData(); rs.getMetaData();
查看数据库中表的信息
事务处理流程:
1,关闭自动提交;2,执行操作;3,处理数据;rollback或commit;4,打开自动提交
commit不仅是原有事务的结束,也是新事务的开始。
并发控制:
事务级别:transaction_none; transaction_read_uncommitted(默认); transaction_read_committed:解决脏读dirty read
transaction_repeateable_read:解决不可重复读的问题:non_repeated read
transaction_serializable:解决幻读:phantom read
oracle只支持read_commit和serializable
例如:conn.setTransactionIsolation( Connection.TRANSACTION_READ_COMMITTED );
回滚集的问题:
CONCUR_READ_ONLY, CONCUR_UPDATEABLE:
用来指定可不可以修改数据库:
TYPE_FORWARD_ONLY 默认
TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENITIVE
用来指定Result能不能滚动
可以用refreshRow刷新当前行。
例:Statement stm = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATEABLE);
定位方法:全部返回boolean,除afterLast(), beforeFirst()复位,返回void
absolute(int row) 传输绝对定位
first(), last(), next(), previous()向前一位
relative(int ) 相对定位
isAfterLast(), isBeforeFirst(), isFirst(), isLast();
注意:指针一开始是指在第一行的前面。
可更新结果集:
rs.updateInt(1, 9911); //更新当前行
rs.updateString("name", "tony");
rs.updateRow(); //修改生效,不调用则无效
rs.absolute(10);
rs.deleteRow(); //删除第10条记录
rs.cancelRowUpdates(); //放弃修改,删除还是会生效
插入新行
rs.moveToInsertRow(); //创建一个空记录
rs.updateInt("id", 11);
rs.updateString("name", "rose");
rs.insertRow();
rs.moveToCurrentRow(); //修改生效
rs没有主键则不能插入数据,必须包含所有的无默认值的非空字段,只能查一个表,不能连接查询,查询结果必须包含主键
如果是插入的话,必须选择表中所有不能为空的列。
批量处理:batch
con.setAutoCommit(false); //关闭自动提交
Statement stm = con.createStatement();
stm.addBatch("insert into t_user(id) value(11)");
stm.addBatch(" ... ");
int[] results = stm.executeBatch(); //返回所有成功的操作结果
con.commit();
con.setAutoCommit(true); //恢复自动提交
高级数据类型:
Blob ------ SQL Blob //大二进制对象 binary large object
Clob ------ SQL Clob //大文本二进制对象character large object
Array ----- SQL Array
Struct ---- SQL structure Type
Ref ------- SQL REF
方法:getXXX, setXXX, updateXXX
步骤:1,获得数据库连接,2,向表中插入一个空的Blog字段,3,获得Blob的输出流,4,通过输入流将数据写入数据库
如:
try{
conn.setAutoCommit(false);
Blob blob = null;
PreparedStatement pstm = conn.prepareStatement("insert into t_blob(id,filename,blobData) value
(?,?,empty_blob())"); //empty_blob()函数由oracle提供,用来创建空对象
pstm.setInt(1,10);
pstm.setString(2,"d:/hello.mp3");
pstm.executeUpdate(); //插入空值
pstm.close();
pstm = conn.prepareStatement("select blobData from u_blob where filename = ? for update"); //for update
同步必须使用,只能在查询时使用
pstm.setString(1, "d:/hello.mp3");
rs = pstm.executeQuery();
if(rs.next()){
Blob b = rs.getBlob();
oracle.sql.BLOB ob = (oracle.sql.BLOB)b;
OutputStream os = ob.getBinaryOutputStream();
InputStream is = new FileInputStream("d:/hello.mp3");
byte[] buffer = new byte[4096];
int len = 0;
while(true){
len = is.read(buffer);
if(-1 == len) break;
os.write(buffer, 0, len);
}
is.close();
os.close();
conn.commit();
}
}catch(Exception e){
conn.rollback();
}finally{
}
查询:
conn.setAutoCommit(false);
pstm = conn.prepareStatement("select blobData from u_blob where name = ? for update");
rs = pstm.executeQuery();
if(rs.next()){
blob b = rs.getBlob(1);
InputStream is = b.getBinaryStream();
OutputStream os = new FileOutputStream(path);
byte[] bb = new byte[4096];
int len = 0;
while(true){
len = is.read(bb);
if(len == -1) break;
os.write(bb, 0, len);
}
}
DataSource
WebLogic:services----->JDBC---->connection pool
JNDI:java naming directory interface api
用DataSource建立connection步骤:1,获得数据库连接,2,支持连接池,3,通常可以支持JNDI,4,支持分布式事务
OID:object id:对象在数据库中的ID
OOAD:object orient analyze and design面向对象的分析与设计
ODBC:open database connectivity:开放的数据库连接
JDBC:java database connectivity:java数据库连接
JDBC驱动程序可分为4类:
1,JDBC-ODBC桥; 2,部分本地API,部分JAVA驱动程序; 3,JDBC网络纯JAVA驱动程序; 4,本地协议纯JAVA驱
动程序,这个效率最高
Driver接口:
SQLSERVER:com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://IP:1433;数据库名,用户名,密码
MySQL:com.mysql.jdbc.Driver
jdbc:mysql://IP:3306/数据库名,用户名,密码
DB2:com.ibm.db2.jdbc.app.DB2Driver()
jdbc:db2://IP:端口/数据库名,用户名,密码
oracle:jdbc:oracle:thin:@IP:PORT,DBname,user,password
pointbase:jdbc:pointbase:server://ip:port,dbname,user,password
com.pointBase.jdbc.jdbcUniverSqlDriver
DriverManager类是驱动程序管理器类,所有方法都是静态的,一个statement对象在同一时刻只有一个打开的ResultSet对象,在
statement接口中定义的所有executeXXX()方法都隐含地关闭statement当前的ResultSet对象,如果你要执行多个查询语句,并且需
要同时对它们的结果集进行操作,那么你必须使用多个statement对象。
DataSource例子:
javax.naming.context ctx = new javax.naming.InitialContext();
//JNDI名是相对于java:comp/env上下文的,因此在程序中利用JNDI名查询数据源对象时,要加上java:comp/env/
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("java:comp/env/bookstore");
java.sql.Connection conn = ds.getConnection();
发表评论
-
Weblogic10.x部署Spring3、Spring Data JPA
2013-09-02 12:00 3139项目中使用了Spring3、Spring Data JPA在 ... -
Spring3 JmsTemplate与MQ的集成
2013-09-02 11:58 8874基于IBM的产品一向对开发者不太友好,特此记录一下Sprin ... -
Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数
2011-12-02 11:32 27150众所周知,Mybatis本身没有提供基于数据库方言的分 ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解
2011-09-20 14:19 1239在项目中总会遇到 ... -
关于UnsupportedOperationException异常
2011-04-20 13:00 1335我们在使用collection框架 ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解【转】
2011-03-10 11:01 890在项目中总会遇到一些 ... -
XFire开发指南
2010-12-12 16:58 1059一本写的不错的教程。 -
Java基于Schema验证xml
2010-09-19 14:32 4443现在基于webservice的接口 ... -
spring 配置log4j
2010-09-05 16:33 1121<!--如果不定义webAppRoo ... -
javadoc注释规范
2010-09-05 16:32 1121一. Java 文档 // 注释一 ... -
spring 任务
2010-08-25 12:36 1190<!-- 任务从此处开始 ... -
通过观察者模式和Reactor模式深入理解JAVA NIO 线程
2010-08-23 15:22 5698Java NIO非堵塞应用通常 ... -
JAVA对文件和文件夹的操作代码示例
2010-08-04 13:00 1327JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容 ... -
Java编码浅析(注意区分三个概念)
2010-08-04 12:21 864Java与Unicode: Java的class ... -
Java路径问题最终解决方案之一
2010-08-04 11:43 749Java的路径问题,非常难 ... -
quartz轮询未按间隔时间执行解决方法
2010-05-24 22:19 4569前几日调试一个有些年纪的发送短信的war包,采用的是quart ... -
JSP页面缓存技术浏览器缓存
2009-04-10 14:42 5458一、概述 缓存的思想可以应用在软件分层的各个层面。它是 ...
相关推荐
JDBC读写Oracle的CLOB字段
JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等...
oracle Blob Clob 大数处理 代码 文件上传 下载
jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc ...
Oracle导出Clob,Blob等大字段工具,自己写的工具,方便大家下载使用
oracle Blob转换Clob
weblogic下转换oracle 的clob类型经常报转型错误,本例子通过反射解决weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB转型成oracle.sql.CLOB问题
JDBC中操作Blob、Clob等对象
oracle中使用jdbc读写clob字段,很多细节介绍,内容全面。
很多朋友在操作oracle数据库的clob,blob字段时不知道怎么插入和使用,这里提供读写范例。
Oracle导出Clob,Blob工具 ,支持导出CLob工具版本2,解决上个版本导出时间有问题的bug
UTL_RAW.CAST_TO_VARCHAR2
ORACLE中CLOB字段转String类型
简单写的一个小工具,把图片存入oracle中,按clob和blob两种方式存储,并读取图片
oracle中用来存储大数据的BLOB(图片,文本,文件等)的 读写与复制方法
oracle中的Blob和Clob区别,希望对大家学习有帮助呵
C#访问oracle数据库类 1、执行非查询命令 2、执行查询命令 3、带blob字段读写
主要介绍了使用JDBC4.0操作Oracle中BLOB类型数据的方法,我们需要使用ojdbc6.jar包,本文介绍的非常详细,需要的朋友可以参考下
sql server中的image类型的数据导出到oracle的clob字段中
批量导出oracle bolb图片到本地文件