resultset.getString(Long Varchar字段)乱码

realcbb 2009-12-18 06:00:44
数据库: db2
用con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)的话,取出来的long varchar 类型字段是乱码;

如果用con.prepareStatement(sql), 取出来就是正确的.

请问有没有谁碰到过这个问题, 指教一下.
...全文
917 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
realcbb 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 crazylaa 的回复:]
引用 6 楼 realcbb 的回复:
引用 5 楼 crazylaa 的回复:
引用 4 楼 realcbb 的回复:
最新测试, 把ResultSet.TYPE_SCROLL_SENSITIVE换成TYPE_FORWARD_ONLY就不会出现乱码.
请教大家!

sensitive,数据库的更改会影响当前结果集且游标可以来回定位。。。。forward_only不会,且只能前滚。
是否数据库的更改影响了结果集的metadata?
楼主改为TYPE_SCROLL_INSENSITIVE看看有没有乱码?如果没有乱码就表明数据库更改导致结果集MetaData有更改,可能是DB2的一个bug。。


TYPE_SCROLL_INSENSITIVE也是乱码, 与CONCUR是否可以并发更新没有关系.
只要不是TYPE_FORWARD_ONLY就是乱码...但只是LONG VARCHAR字段是乱码, 普通的VARCHAR还是正确的.


ps: 另外我很奇怪的是, 数据库的编码是GBK, 配置weblogic连接池和数据源的时候都没有设置数据库编码的地方, 这样取出来的数据居然不需要转码. 难道不指定数据库的编码就是按照系统默认编码来算?


那就是只要游标滚动,LONG VARCHAR就会乱?奇怪之至,打IBM的800电话去问下,db2的Long Varchar是否对汉字进行了特殊处理还是怎么的。。

ps:连进DB2/Oracle等数据库不需要像mysql、postgres一样指定编码的,它会以数据库的编码方式返回数据给你。
[/Quote]


IBM 800电话是什么? 8008101818?
可是如果数据库编码是UTF-8, 而我在查询sql中有where中文条件, 它也能识别吗? 还是需要我在构造sql的时候进行转码?
crazylaa 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 realcbb 的回复:]
引用 5 楼 crazylaa 的回复:
引用 4 楼 realcbb 的回复:
最新测试, 把ResultSet.TYPE_SCROLL_SENSITIVE换成TYPE_FORWARD_ONLY就不会出现乱码.
请教大家!

sensitive,数据库的更改会影响当前结果集且游标可以来回定位。。。。forward_only不会,且只能前滚。
是否数据库的更改影响了结果集的metadata?
楼主改为TYPE_SCROLL_INSENSITIVE看看有没有乱码?如果没有乱码就表明数据库更改导致结果集MetaData有更改,可能是DB2的一个bug。。


TYPE_SCROLL_INSENSITIVE也是乱码, 与CONCUR是否可以并发更新没有关系.
只要不是TYPE_FORWARD_ONLY就是乱码...但只是LONG VARCHAR字段是乱码, 普通的VARCHAR还是正确的.


ps: 另外我很奇怪的是, 数据库的编码是GBK, 配置weblogic连接池和数据源的时候都没有设置数据库编码的地方, 这样取出来的数据居然不需要转码. 难道不指定数据库的编码就是按照系统默认编码来算?
[/Quote]

那就是只要游标滚动,LONG VARCHAR就会乱?奇怪之至,打IBM的800电话去问下,db2的Long Varchar是否对汉字进行了特殊处理还是怎么的。。

ps:连进DB2/Oracle等数据库不需要像mysql、postgres一样指定编码的,它会以数据库的编码方式返回数据给你。
liuahuilele 2009-12-22
  • 打赏
  • 举报
回复
db2不懂 所以顶好了
realcbb 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crazylaa 的回复:]
引用 4 楼 realcbb 的回复:
最新测试, 把ResultSet.TYPE_SCROLL_SENSITIVE换成TYPE_FORWARD_ONLY就不会出现乱码.
请教大家!

sensitive,数据库的更改会影响当前结果集且游标可以来回定位。。。。forward_only不会,且只能前滚。
是否数据库的更改影响了结果集的metadata?
楼主改为TYPE_SCROLL_INSENSITIVE看看有没有乱码?如果没有乱码就表明数据库更改导致结果集MetaData有更改,可能是DB2的一个bug。。
[/Quote]

TYPE_SCROLL_INSENSITIVE也是乱码, 与CONCUR是否可以并发更新没有关系.
只要不是TYPE_FORWARD_ONLY就是乱码...但只是LONG VARCHAR字段是乱码, 普通的VARCHAR还是正确的.


ps: 另外我很奇怪的是, 数据库的编码是GBK, 配置weblogic连接池和数据源的时候都没有设置数据库编码的地方, 这样取出来的数据居然不需要转码. 难道不指定数据库的编码就是按照系统默认编码来算?
crazylaa 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 realcbb 的回复:]
最新测试, 把ResultSet.TYPE_SCROLL_SENSITIVE换成TYPE_FORWARD_ONLY就不会出现乱码.
请教大家!
[/Quote]
sensitive,数据库的更改会影响当前结果集且游标可以来回定位。。。。forward_only不会,且只能前滚。
是否数据库的更改影响了结果集的metadata?
楼主改为TYPE_SCROLL_INSENSITIVE看看有没有乱码?如果没有乱码就表明数据库更改导致结果集MetaData有更改,可能是DB2的一个bug。。
realcbb 2009-12-21
  • 打赏
  • 举报
回复
最新测试, 把ResultSet.TYPE_SCROLL_SENSITIVE换成TYPE_FORWARD_ONLY就不会出现乱码.
请教大家!
realcbb 2009-12-18
  • 打赏
  • 举报
回复
但的确是这样的,其他什么都没改,所以很奇怪...
crazylaa 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 realcbb 的回复:]
数据库: db2
用con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)的话,取出来的long varchar 类型字段是乱码;

如果用con.prepareStatement(sql), 取出来就是正确的.

请问有没有谁碰到过这个问题, 指教一下.
[/Quote]

这这这。。。加了两个参数应该不会对编码有影响啊。。。难道IBM又捣鬼了???

第一个参数指定 ResultSet 的类型。其选项有:

TYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至可以进行特定定位,例如移至列表中的第四个记录或者从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 一样,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。


第二个参数设置 ResultSet 的并发性,该参数确定是否可以更新 ResultSet。其选项有:

CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet
CONCUR_UPDATABLE:指定可以更新 ResultSet
kernll 2009-12-18
  • 打赏
  • 举报
回复
如果是这样,那么你的操作系统和你的数据库的默认的字符编码是不同的。或者说你用的框架有的方法是没有是使用字符编码来进行校验的。所以重载的方法也可能实现的检验方式是不同的。小小浅见。。。
代码下载链接: https://pan.quark.cn/s/a8fbca3925b4 《鸿蒙OS开发环境构建》指南系统性地阐述了配置和筹备鸿蒙OS开发所需的各种工具和条件的具体方法。鸿蒙OS,亦称HarmonyOS,是由华为研发的一款面向全场景的分布式操作系统,其目标是提供跨平台、多设备间无缝协作的使用体验。本指南涉及了从Linux服务器到Windows工作站的完整开发流程。指南中提及了MobaXterm,这是一款用于连接Linux源码服务器的软件,使得开发人员能够在Windows环境中远程访问Linux服务器。同时,HiTool作为烧录工具,用于将编译后的系统镜像写入开发板。IPOP.EXE则是一款串口终端软件,用于执行串行通信和调试任务。Embedded Studio用于开发设备驱动程序,而DevEco Studio是华为提供的图形化应用程序开发平台,支持C/C++语言,拥有代码编辑、编译、烧录和调试功能,被视为OpenHarmony智能设备开发者的首选集成开发环境。在硬件配置方面,指南列出了必需的设备,包括Linux服务器(推荐Ubuntu 16.04及以上版本),Windows工作台(兼容XP/7/10),以及Hi3518EV300 IoT Camera单板。开发期间,Windows工作台通过USB线与单板相连接,以实现数据传输。此外,为了开展开发工作,还需要安装putty、IPOP、tftp服务器等辅助软件,以及HiTool用于烧录操作。在软件系统要求方面,Linux服务器需要安装bash、Python3.7+、gn、ninja、LLVM等构建工具,这些工具对于生成和执行编译脚本具有关键作用。在Windows工作台上,建议采用Visual Studi...

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧