使用jaydebeapi 遇到clob类型或数据库text类型无法读取问题解决记录

jaydebeapi text类型无法读取问题解决记录


最近使用jdbc连接数据库,发现数据库后台是text类型数据无法读取的,直接打印显示:


<java object 'XXX.nds.jdbc.driver.NdsClob'>

一开始认为是不是jaydebeapi这个库本身的问题,后来认为一般不会是源码有问题就放弃了这种思路。

然后使用如下思路解决了这个问题:
使用dir查看<>java的clob类有哪些属性和方法:在这里插入图片描述
观察发现这个方法最有可能包含信息:
在这里插入图片描述
根据字面解释试了该方法,因为名称是stream方法,一般是使用read取字符,read只调用一次发现对应数据库空行的位置显示*-1*,有值的地方显示数据,于是估计是Unicode编码,随后使用循环获得Unicode编码并且使用chr()进行翻译,完整翻译后果然获得了数据。
完整代码如下:

conn = jaydebeapi.connect(driver, url, [user, password],jars=jarFile)
curs = conn.cursor()
curs.execute(sqlStr)
result = curs.fetchall()
curs.close()
print(len(result))
test_data=result[0]
print(test_data)
for i,tag in enumerate(test_data):
    if 'NdsClob' in str(type(tag)):
        #思路:使用dir查看<>java的clob类有哪些属性,根据字面解释试出一个方法,因为是stream方法,一般是使用read取字符,read只调用一次发现对应数据库空行的位置显示-1,有值的地方显示数据,于是估计是Unicode编码,随后使用循环获得Unicode编码并且使用chr()进行翻译
        stream = tag.getCharacterStream()
        string = ''
        while True:
            jint=stream.read()
            if jint==-1:
                break
            string +=chr(jint)#使用流的方式进行读取,-1代码流结束了,然后使用chr()进行Unicode翻译
        print(i,"---"+string)
    else:
        print(i,"---"+str(tag))
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值