jdbc获取clob图片_jdbc方式读取oracle的clob字段实例

可能大家也都习惯了spring和hibernate对CLOB字段的处理,在spring中配置clob的oracle处理句柄,在hibernate中配置映射类型,然后就可以很轻松的以String 的形式处理大字段。

今天我做了个需求,需要以jdbc的方式从mysql导一些备份数据到oracle正式库,就查了一些资料,最后写了个例子:

1:首先:写个连接数据库的类,里面有返回mysq, oracle连接的方法

public Connection getConn(String flag){

Connection con=null;

try

{

if(flag.equals("1"))

{

Class.forName(“oracle.jdbc.driver.OracleDriver”);

con = DriverManager.getConnection(“jdbc:oracle:thin:@IP:1521:数据库名字”,"name","password");

}

if(flag.equals("2"))

{

Class.forName("org.gjt.mm.mysql.Driver");

con = DriverManager.getConnection("jdbc:mysql://localhost/数据库名?user=用户名&password=密码&useUnicode=true&characterEncoding=GBK");

}

}

catch(Exception e)

{

e.printStackTrace();

}

return con;

}

2:执行插入操作

public void setData() {

conn = new Conn();

try {

String sqlfrom = "select  p.id,p.content from table p  order by p.id   ";

String sqlinsert = "insert into table   values(?,?)";

con = conn.getConn("2");

stmt = con.createStatement(); //从mysql取出大字段

rs = stmt.executeQuery(sqlfrom);

con = conn.getConn("1");

PreparedStatement pstmt = con.prepareStatement(sqlinsert); //向oracle中插入大字段

int i = 0;

while (rs.next()) {

pstmt.setInt(1, rs.getInt(1));

pstmt.setClob(2, oracle.sql.CLOB.empty_lob());

pstmt.executeUpdate();  //插入时将大字段设为空

this.updateOne(con,rs.getInt(1),rs.getString(2));  // 这里调用然后更新这个大字段

}

rs.close();  //关闭相关连接

pstmt.close();

stmt.close();

con.close();

} catch (Exception e) {

e.printStackTrace();

try

{

con.rollback();

} catch (Exception e1) {

System.out.println("回滚出现异常!");

e1.printStackTrace();

}

}

}

3:该方法实现对应大字段记录的更新

public void updateOne(Connection con,int id, String content) {

String str = "select t.content from table  t where t.id=" + id+ "  for update";

try {

// 注意:存取操作开始前,必须用setAutoCommit(false)取消自动提交,否则Oracle将抛出“读取违反顺序”的错误。

con.setAutoCommit(false);

stmt = con.createStatement();

ResultSet   rs_clob = stmt.executeQuery(str);

while ( rs_clob .next()) {

/* 取出clob数据*/

oracle.sql.CLOB clob = (oracle.sql.CLOB)  rs_clob .getClob(1);

/* 向clob中写入数据*/

clob.putString(1, content);

}

stmt.close();

con.commit();

con.setAutoCommit(true);

con.close();

} catch (Exception e) {

e.printStackTrace();

try

{

con.rollback();

} catch (Exception e1) {

System.out.println("回滚出现异常!");

e1.printStackTrace();

}

}

}

现在就完成了一行记录的更新。

4:读clob字段以String 的形式返回(当然也可以将读到的内容写入文件,大家改一下就可以了)

/**

* 读clob字段

* @param con

* @param id

* @return

*/

public String  readClob(Connection con,int id)

{

String content="";

try

{

con.setAutoCommit(false);

stmt=con.createStatement();

ResultSet rs_clob=stmt.executeQuery("select  t.content  from  table t where t.id="+id);

oracle.sql.CLOB contents=null;

while (rs_clob.next())

{      // 取出CLOB对象

contents= (oracle.sql.CLOB) rs_clob.getClob(1);

}

BufferedReader a = new BufferedReader(contents.getCharacterStream());  //以字符流的方式读入BufferedReader

String str = "";

while ((str = a.readLine()) != null) {

content = content.concat(str);  //最后以String的形式得到

}

con.commit();

/*

BufferedWriter out = new BufferedWriter(new FileWriter("e:/test.txt"));

out.write(content);//写入文件

out.close();*/

con.setAutoCommit(true);

con.close();

}catch(Exception e)

{

System.out.println("出现异常");

e.printStackTrace();

try

{

con.rollback();

}

catch (Exception e1)

{

System.out.println("回滚出现异常!");

e1.printStackTrace();

}

}

return content;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14. Java基础之泛型

一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest {2 3 public static void main(String[] args) {4 List list new ArrayList();5 list.add("qqyum…

java学习(15):巩固练习

//任务 1 //编写控制台java程序,使用Scanner 对象相关方法从 //控制台接收用户输入如下数据并使用相关的局部变量接收,在控制台打印输出。 //老师的姓名;老师的性别;老师的工资;老师的年龄;工作时长 import…

java学习(16):巩固练习

/任务 2 编写控制台java程序,将以下数据使用合理类型变量进行接收赋值 3.5;185.59;8500.50 要求在控制台打印这些数据并只显示整数部分。/ import java.util.Scanner; public class test02{ public static void main(String[] args){ Scanner…

mac电脑投屏到小米盒子_苹果手机搜不到小米盒子怎么办?

刚买的小米电视盒子迫不及待想投屏,但是手机是苹果系统,都是连得同一wifi,可是手机就是搜索不到小米家的客厅电视,这种情况该怎么办呢?以下小编给大家详细介绍了苹果手机搜不到小米盒子该怎么办。苹果设备中搜不到小米…

Redis实现之对象(三)

集合对象 集合对象的编码可以是intset或者hashtable,intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。举个栗子,以下代码将创建一个图1-12所示的intset编码集合对象: 127.0.0.1:637…

java学习(17):巩固练习

//#任务 3 //#已知有三个人,张无忌,任盈盈,任我行。当前只知道任盈盈的年龄 //#可以被用户从控制台输入,并且用户可以告知任盈盈的年龄比张无忌的年龄小几岁, //#任我行年龄是张无忌和任盈盈年龄和还要大几岁&#xff…

mysql innodb redolog_MySQL · 引擎特性 · InnoDB redo log漫游(转)

前言InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性。和大多数关系型数据库一样,InnoDB记录了对数据文件的物理更改&#xff0c…

Jenkins配置:添加用户和管理权限

Jenkins配置:添加用户和管理权限 参考文章:http://www.cnblogs.com/zz0412/p/jenkins_jj_14.html 今天给大家说说使用Jenkins专有用户数据库的配置,和一些常用的权限配置。 配置用户注册 在新安装好的jenkins中,默认是没有设置用户…

java学习(18):巩固练习

/任务 4 白大壮和白二壮是双胞胎兄弟, 白大壮的身高增加1厘米正好是白二壮的身高 ,白二壮体重正好是妹妹白无瑕体重,编写程序完成白大壮 和白二壮身高的计算并输出,并计算白无瑕的体重输出是多少/ import java.util.Scanner; publ…

mysql 读取comment_Mysql 获取表的comment 字段

查看获取表内字段注释:> show full columns from tablename;或是show full fields from tablename;或是,在元数据的表里面看Select COLUMN_NAME 列名, DATA_TYPE 字段类型, COLUMN_COMMENT 字段注释from INFORMATION_SCHEMA.COLUMNSWhere table_name …

java-appium-527进阶-1 UiAutomator12区别和封装

1.UiAutomator和UiAtumator2的区别: 1.1 UiAutomator1有关于id定位的策略 UiAutomator1 id定位在resourceid匹配失败时,会匹配contentDesc。 安卓会根据id进行3种情况的判断: 1.resourceId 如user_profile_icon2.accessibility id3.Strings.…

java学习(19):巩固练习

/任务 5 有三位老师,王老师,孙老师和小李老师, 王老师工龄最长(15年),孙老师工龄比王老师小3年, 小李老师工龄最短,是王老师和孙老师工龄和的二分之一 再除以2的余数正好是他的工龄,编写程序从控…

mysql分组获取其他字段_sqlserver group by后获取其他字段(多种方法)

大家都知道用group by的话,select 后面指定的字段必须与group by后面的一致。group by 只有个别字段,如果拿出其他未分组的字段信息呢?在网上搜了下,总结如下:使用了group by 之后,就要求select后面的字段包…

搜索引擎基础概念(1)—— 倒排索引

“ 吾有三剑,唯子所择;皆不能杀人,且先言其状。一曰含光,视之不可见,运之不知有。其所触也,泯然无际,经物而物不觉。二曰承影,将旦昧爽之交,日夕昏明之际,北面…

java学习(20):巩固练习

//用运算符判断2019是不是闰年 /①、普通年能被4整除且不能被100整除的为闰年。 (如2004年就是闰年,1901年不是闰年)地球公转示意图②、世纪年能被400整除的是闰年。 (如2000年是闰年,1900年不是闰年) ③、 对于数值很大的年份能整除3200,但同…

PHP与MySQL案例剖析_PHP与MySQL案例剖析

第1章 简介1.1 从静态到动态站点1.1.1 静态Web站点1.1.2 动态Web站点1.1.3 什么是开放源码1.2 关于PHP1.3 关于MySQL1.3.1 在哪里获得MySQL和文档1.3.2 MySQL特性1.3.3 如何安装MySQL和PHP1.3.4 MySQL和PHP的优点1.4 本章小结1.4.1 应该掌握的内容1.4.2 下一步第…

crud介绍

什么是CRUD? CRUD的操作 CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中DataBase或者持久层的基本操作功能。 数据库CRUD操作 一、删除表 drop table 表名称 二、修改表…

汇编软件的安装与实验一

软件的安装在课程邮箱里有详尽的介绍,但在安装调试的时候还是出了一点小问题,创建虚拟盘符的时候,我将masm文件夹前面套上了一层名为masm文件夹,导致虚拟盘符创建之后无法使用debug。 随后就是实验 实验1.1写入程序段并且执行 a命…

python3.6 websocket异步高并发_在Python3.6上的websocket客户端中侦听传入消息时出现问题...

我正在尝试使用websockets包在Python上构建一个websockets客户端:Websockets 4.0 API我使用这种方式而不是示例代码,因为我想创建一个websocket客户机类对象,并将其用作网关。在我在客户端的侦听器方法(receiveMessage)有问题,这会…

upc 9519 New Game

New Game 时间限制: 1 Sec 内存限制: 128 MB Special Judge提交: 157 解决: 53[提交] [状态] [讨论版] [命题人:admin]题目描述 Eagle Jump公司正在开发一款新的游戏。泷本一二三作为其员工,获得了提前试玩的机会。现在她正在试图通过一个迷宫。这个迷宫有一些特…