免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3241 | 回复: 2
打印 上一主题 下一主题

jdbc连接db2后getString("XXX")出来的字符串是乱码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-25 16:41 |只看该作者 |倒序浏览
jdbc连接db2(DB2 v8.1.1.60)后getString("XXX"出来的字符串是乱码,无论我怎么转换,都是乱码,
我的数据库配置:
Database territory                                      = CN
Database code page                                      = 1386
Database code set                                       = GBK
Database country/region code                            = 86

下面是源代码,有能力人士帮忙解答,谢谢:


import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class NewData {

        /**
         * @param args
         */
       
        public static void main(String[] args) {
                NewData d = new NewData();
                System.out.println(d.exec());
        }

        private String toGB2312(String str) {
               
        byte gb2312[]=new byte[str.length()];
        for(int i=0;i<str.length();i++)
                gb2312[i]=(byte)str.charAt(i);
      
                        return new String(gb2312);
               
}
        private String getObj(String ret)
        {
               
                //return new String(o.getBytes("iso-8859-1", "GB2312";
                String value="";
                try {
                        value=new String(ret.getBytes("iso-8859-1","gb2312";
                                                     //上面这个地方无论怎么换都不行
                } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return value;
        }
        public String getStr(String str)
       
        {
               
        try{
        String temp_p = str;
        byte [] temp_t = temp_p.getBytes("UTF-16";
        String temp = new String(temp_t);
        return temp;
        }
        catch(Exception e){
        return "";
        }
        }

        private boolean exec()
        {
                boolean f=true;
                Connection conn = getConn();
                Statement stmt=null;
                ResultSet rs=null;
                try {
               
                        stmt=conn.createStatement();
                        String sql="select * from dcx.d_billcode fetch first 5 rows only";
                        rs=stmt.executeQuery(sql);
                        while(rs.next())
                        {
                                System.out.println(getObj(rs.getString("brand_name"));
                        }

                /*
                        conn.setAutoCommit(false);
                //Integer value=new Integer(200601);
                CallableStatement cs=conn.prepareCall("{call dcx.p_vpmn_temp(?,?,?)}";
               
       
                cs.setInt(1,200601);
                cs.registerOutParameter(2,Types.INTEGER);
                cs.registerOutParameter(3,Types.OTHER);
                cs.executeQuery();
                System.out.println("??";
                System.out.println(cs.getInt(2));
                System.out.println(cs.getObject(3));
                */
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        f=false;
                }
            finally
                {
                        if(null!=rs)
                                try {
                                        rs.close();
                                } catch (SQLException e1) {
                                        // TODO Auto-generated catch block
                                        e1.printStackTrace();
                                }
                        if(null!=stmt)
                                try {
                                stmt.close();
                                } catch (SQLException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        if(null!=conn)
                                try {
                                        conn.close();
                                } catch (SQLException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
               
                }
               
       
                return f;
               
        }
        private Connection getConn() {
                Connection conn = null;
                try {
                        Class.forName("COM.ibm.db2.jdbc.app.DB2Driver".newInstance();
                        String user = "xxxx";
                        String password = "xxxx";
                        String url = "jdbc:db2xx";
                       
                        conn = DriverManager.getConnection(url, user, password);
                       
                } catch (Exception e) {
                        e.printStackTrace();
                        conn = null;
                }
                return conn;
        }

}

论坛徽章:
0
2 [报告]
发表于 2006-04-27 09:06 |只看该作者
请问一下,你建数据库时是用的什么命令,建议在使用JAVA时采用编码:
create db dbname on path 'path' using codeset GBK territory zh_CN

看看跟您建时是否一样,正常情况Database territory 中的值应该是zh_CN.

论坛徽章:
0
3 [报告]
发表于 2006-05-09 08:45 |只看该作者
你得环境是英文的还是中文的!
db2 set默认是没有zh_cn的,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP