当前位置: 首页 > news >正文

java clob http传送,java之clob类型数据的处理

背景

由于Java对于数据库返回的clob类型不能直接当做String类型处理,需经过转换才可以读取。之前的转换代码如下:1

2

3

4

5

6

7

8public void setIp_clob(oracle.sql.CLOB ip_clob){

this.ip_clob = ip_clob;

try {

ip = ip_clob.getSubString(1, (int)ip_clob.getLength());

} catch (SQLException e) {

e.printStackTrace();

}

}

但是发现处理完返回给前台展示的数据不全。

排查

考虑可能转换代码中截取长度这儿存在问题,oracle.sql.CLOB有两种获取长度的方式:Clob.getLenth()

Clob.length()

分别打印出来:1

2System.out.println(ip_clob.length());

System.out.println(ip_clob.getLength());

输出为:1

23653

106

果然是不一样的,length()会长一点。

于是修改代码:1

2

3

4

5

6

7

8public void setIp_clob(oracle.sql.CLOB ip_clob){

this.ip_clob = ip_clob;

try {

ip = ip_clob.getSubString(1, (int)ip_clob.length());

} catch (SQLException e) {

e.printStackTrace();

}

}

注:在实际中,两者并非都是length()获取的更长,但根据length()获取的值来截取不会存在数据不全的问题。

修改了长度获取方式之后,问题就解决了。但通过getSubString()的方式不是很好,而且使用使用oracle.sql.COLB会存在于oracle驱动的强绑定。

还建议按如下方式处理:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15import java.sql.Clob;

import org.apache.commons.io.IOUtils;

public void setIp_clob(Clob ip_clob){

this.ip_clob = ip_clob;

try {

ip = IOUtils.toString(ip_clob.getCharacterStream());

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

通过调用java.sql.Clob,避难对oracle驱动的依赖,然后利用IOUtis包来进行处理得到string类型的输出。

拓展

关于oracle.sql.CLOB中的长度获取:

length():Implements the Clob interface method. Returns the number of characters in the CLOB value designated by this Clob object. Return length of the CLOB in characters。

https://download.oracle.com/otn_hosted_doc/jdeveloper/905/jdbc-javadoc/oracle/sql/CLOB.html#length()

getLength(): Retreive the length of a datum. Return the length of the datum in bytes.

https://download.oracle.com/otn_hosted_doc/jdeveloper/905/jdbc-javadoc/oracle/sql/Datum.html#getLength()

可见length()是返回字符数,而getLength()为返回bytes数。

相关文章:

  • fedora 安装php yaf,构建基于nginx-php-yaf的docker镜像
  • php写统计投票数,php画投票统计图 - huolong的个人空间 - OSCHINA - 中文开源技术交流社区...
  • php会话类,php简单的会话类代码
  • php设置超时等待时间,php设置超时时间的方法
  • oracle零基础可以学么,零基础学Oracle
  • oracle数据库异机备份脚本,服务器A制定计划任务,BAT脚本自动备份oracle数据文件,拷贝至服务器B的共享目录。...
  • 百度sms php,php 调用百度sms来发送短信的实现示例
  • oracle索引的storage,Oracle全文索引的STORAGE属性有什么特点?
  • php 字符串向前截取,php字符串截取函数
  • oracle 查询本年12月,ORACLE 写一条Sql语句查出年份,1月,2月,3月....12月的订单总数列表...
  • sqlserver新建oracle发布是咋回事,SQLServer创建链接服务器对象链接oracle
  • linux桌面环境占用内存对比,最新精简型Linux桌面环境大比拼:LXDE Vs Xfce Vs MATE
  • dnw linux 内核,神器DNW2 FOR LINUX!
  • linux 单独装ftp服务,linux下安装FTP服务
  • linux日志服务重开,linux重新編譯內核
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Javascript 原型链
  • JavaScript服务器推送技术之 WebSocket
  • js中forEach回调同异步问题
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • MySQL数据库运维之数据恢复
  • nodejs调试方法
  • React as a UI Runtime(五、列表)
  • React Transition Group -- Transition 组件
  • redis学习笔记(三):列表、集合、有序集合
  • SQLServer插入数据
  • webpack入门学习手记(二)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 手机端车牌号码键盘的vue组件
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​批处理文件中的errorlevel用法
  • #pragam once 和 #ifndef 预编译头
  • (6)设计一个TimeMap
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (力扣题库)跳跃游戏II(c++)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (转)Unity3DUnity3D在android下调试
  • (转)用.Net的File控件上传文件的解决方案
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 5种线程安全集合
  • .NET Core跨平台微服务学习资源
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET企业级应用架构设计系列之技术选型
  • .NET下ASPX编程的几个小问题
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @Autowired和@Resource装配
  • @Conditional注解详解
  • [100天算法】-二叉树剪枝(day 48)
  • [20150904]exp slow.txt