如何在连接级别以正确格式(CCSID 37)转换IBM DB2十六进制数据,而不使用CAST函数

时间:2016-11-24 07:28:59

标签: java node.js database db2 apigee

在我的应用程序中,我将IBM DB2数据库作为存储,并且我的数据服务层已使用Node.js实现。我已使用db2.jar通过Progress给出的DataDirect方法建立了与IBM DB2 iSeries数据库的JDBC连接。当我执行任何选择查询时,从DB返回的结果是十六进制值不是我想要的正确值。 为了解决这个问题,我可以选择在每个列的查询级别使用CAST函数,但这不是很有效,因为我必须在每列中应用此CAST,所以我试图在连接级别使用通用解决方案,以便我不必像JTOpen中的“translate binary = true”那样在每一列中应用此强制转换。

以下是选择查询的结果 -

Without CAST function :
Query =  SELECT poMast.ORDNO from AMFLIBL.POMAST AS poMast WHERE poMast.ORDNO = 'P544901'
Result in Hex format = D7F5F4F4F9F0F1


With CAST function :
Query = SELECT CAST(poMast.ORDNO CHAR(7) CCSID 37) AS ORDNO from AMFLIBL.POMAST AS poMast WHERE poMast.ORDNO IS NOT NULL
Result in proper format = P544901

Connection URL = "jdbc:datadirect:db2://hostname:port;DatabaseName=dbname;"

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

可能会尝试像这样修改你的连接字符串

Connection URL = "jdbc:datadirect:db2://hostname:port;DatabaseName=dbname;translate binary=true;ccsid=37"

或者像这样

Connection URL = "jdbc:db2://hostname:port;DatabaseName=dbname;translate binary=true;ccsid=37"