java调用存储过程返回参数中文乱码

njkzc 2009-10-30 11:28:25
1.存储过程


-- DROP PROCEDURE DB2ADMIN.GETNODENAMEPROC;
CREATE PROCEDURE GETNODENAMEPROC ( IN v_clid VARCHAR(20),IN v_nodeid VARCHAR(20),OUT v_nodename VARCHAR(1000))
LANGUAGE SQL
SPECIFIC GETNODENAMEPROC

MODIFIES SQL DATA

------------------------------------------------------------------------
-- SQL 取得节点名称存储过程
------------------------------------------------------------------------

P1: BEGIN

SET v_nodename='';

FOR T1 AS
(
SELECT name FROM xscl_mx WHERE clid=v_clid AND nodeid=v_nodeid
UNION ALL
SELECT name FROM xscl_kg WHERE clid=v_clid AND (nodeid1=v_nodeid OR nodeid2=v_nodeid)
UNION ALL
SELECT name FROM xscl_drq WHERE clid=v_clid AND nodeid =v_nodeid
UNION ALL
SELECT name FROM xscl_cldkq WHERE clid=v_clid AND (nodeid1=v_nodeid OR nodeid2=v_nodeid)
UNION ALL
SELECT name FROM xscl_bldkq WHERE clid=v_clid AND (nodeid1=v_nodeid OR nodeid2=v_nodeid)
UNION ALL
SELECT name FROM xscl_byq2 WHERE clid=v_clid AND (nodeid1=v_nodeid OR nodeid2=v_nodeid)
UNION ALL
SELECT name FROM xscl_byq3 WHERE clid=v_clid AND (nodeid1=v_nodeid OR nodeid2=v_nodeid OR nodeid3=v_nodeid)
UNION ALL
SELECT name FROM xscl_fh WHERE clid=v_clid AND nodeid =v_nodeid
UNION ALL
SELECT name FROM xscl_line WHERE clid=v_clid AND (nodeid1=v_nodeid OR nodeid2=v_nodeid)
UNION ALL
SELECT name FROM xscl_fdj WHERE clid=v_clid AND nodeid =v_nodeid

) DO

SET v_nodename=v_nodename||T1.name||';';

END FOR;
END P1;


2.java调用
con=clsDataOperate.gConection();

stmt=con.prepareCall("{ call GETNODENAMEPROC (?,?,?) }");
stmt.setString(1, "888888");
stmt.setString(2, "29931node9");
stmt.registerOutParameter(3, java.sql.Types.VARCHAR);

stmt.execute();

String nodename=stmt.getString(3);

//=new String(stmt.getString(3).getBytes("ISO-8859-1"),"GBK");
System.out.println("nodename:"+nodename);


直接查询是没有乱码的,试过java程序中转码没有成功,想问一下存储过程能否声明字符编码?
...全文
171 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldm1011 2010-04-09
  • 打赏
  • 举报
回复
哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦
njkzc 2009-10-30
  • 打赏
  • 举报
回复
new String(stmt.getString(3).getBytes("BIG5"),"GBK");


ok!
yangxiao_jiang 2009-10-30
  • 打赏
  • 举报
回复
存储过程应该不能声明字符编码。

你的java工程的编码是和数据库一样吗?还是不同?

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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