oracle数据库clob数据类型处理

目标:从文本文件中读取clob数据,并保存到oracle数据库中。

 

//创建文件流
BufferedReader br  = new BufferedReader(new FileReader("D:\\sq.js"));//建立一个文件读取流
String lineContent = "";//用于记录每一行内容的变量
//链接数据库
Class.forName("oracle.jdbc.driver.OracleDriver");//加载oracle数据库驱动
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "db_qb", "pw123456");

//oracle数据库JDBC链接字符串,其中:orcl是数据库实例名称,db_qb未数据库用户名,pw123456未密码
Statement st = con.createStatement();//给予数据库链接建立sql陈述对象。
System.out.println("数据库链接成功.");
con.setAutoCommit(false);//关闭自动认可模式
//循环从文本文件读出的数据
 for (int i = 0; (lineContent = br.readLine()) != null; i++) {
  //获得数据
  String str =""+lineContent;
  int f = str.indexOf("=");
  int l = str.length();
  String name =str.substring(0,f);//社区id
  String border=str.substring(f+1,l);//border
  System.out.println(name+"------"+border);
  //数据库结构 id number,border clob;
  //构造sql语句
 String insert ="update tb_gis_community  set border=empty_clob() where id='"+name+"'";//首先给border字段插入一个空的clob对象:empty_clob();(不然的话跟新失败)
 st.executeUpdate(insert);//执行更新语句
 // 锁定数据行进行更新,注意“for update”语句
 String update ="select border from tb_gis_community where id ='"+name+"' for update";//然后更新border字段为从文本文件读入的超长的clob值。
 ResultSet rs = st.executeQuery(update);//执行更新语句
 Writer outStream;//声明一个输出流
 if (rs.next()) {
  oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("border");//获得数据中border的值,并强制转换为clob对象
  outStream = clob.getCharacterOutputStream();//获得clob对象的字符输出流
  String data =border;// 获得从文本文件读取的border值
  char[] c = data.toCharArray();//将border转换为字符数组
  outStream.write(c, 0, c.length);//clob的字符输出流写入字符数组
  outStream.flush();//清空
  outStream.close();//关闭输出流
 }
 }
 con.commit();//提交操作
 con.close();//关闭数据库链接

 

 

 

目标:从oracle数据库中读取clob数据

 

String sql ="select t.point_x,t.point_y,t.border as border from gis_pcs_all t where t.pcs_name='"+name+"'";
//数据库结构:point_x number(20,8) x坐标;point_Y number(20,8) y坐标;border clob gis轮廓数据;
ResultSet res = this.executeQuery(sql);//执行查询的sql语句,获得结果集对象
String[] datas = new String[3];//声明一个大小为3的字符串数组,用来盛装结果
int count =0;
try {
 if(res.next()){
  datas[0] = res.getDouble(1)+"";//x坐标
  datas[1] = res.getDouble(2)+"";//y作保
  CLOB clob = (CLOB) res.getClob("border");//gis轮廓数据 需要强制转换为club对象,但这是不能够直接使用  
  if(clob!=null){
            char[] chars = new char[(int) clob.length()];//(int)clob.length();//依据club对象大小,创建一个字符数据
            //System.out.println(clob.getLength()+":::"+clob.length());//clob.getLength()和clob.length()两个长度不一样,前者大概是后者的两倍,且前者导致方块乱码
            clob.getCharacterStream().read(chars);   //用字符数组接受clob对象的字符输出流
            String content = new String(chars);   //根据字符数据实例化字符串对象,java程序可以直接使用了
   datas[2] =( content==null?"":content+"");//
   System.out.println("clob信息:"+datas[0]+"==="+content);
   return datas;
  }else{
   System.out.println("clob为空");
   return null;
  }
 }

 

 

 

 

 

<!-- 日志内容 结束 --><!-- 日志来源 开始 --><!-- 日志来源 结束 --><!-- 日志信息 开始 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值