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程序中转码没有成功,想问一下存储过程能否声明字符编码?