java - 通过 JDBC 进行 DB2 AS/400 查询?

标签 java jdbc encoding db2 ibm-midrange

我正在尝试处理一个 Java 项目,该项目需要查看现有 DB2 AS/400 服务器中的数据,但一直告诉我此错误:

com.ibm.db2.jcc.am.to: [jcc][t4][10379][11959][4.8.87] Client disconnect exception encountered: [jcc][10275][10261]Unsupported ccsid, encoding, or locale: "65535". ERRORCODE=-4499, SQLSTATE=null
    at com.ibm.db2.jcc.am.gd.a(gd.java:321)
    at com.ibm.db2.jcc.am.gd.a(gd.java:347)
    at com.ibm.db2.jcc.t4.fc.e(fc.java:2245)
    at com.ibm.db2.jcc.t4.fc.e(fc.java:2134)
    at com.ibm.db2.jcc.t4.db.c(db.java:4439)
    at com.ibm.db2.jcc.t4.db.b(db.java:4384)
    at com.ibm.db2.jcc.t4.db.a(db.java:4370)
    at com.ibm.db2.jcc.t4.eb.oc(eb.java:349)
    at com.ibm.db2.jcc.t4.fb.o(fb.java:830)
    at com.ibm.db2.jcc.t4.fb.g(fb.java:143)
    at com.ibm.db2.jcc.t4.fb.a(fb.java:40)
    at com.ibm.db2.jcc.t4.t.a(t.java:32)
    at com.ibm.db2.jcc.t4.ub.i(ub.java:135)
    at com.ibm.db2.jcc.am.wm.hb(wm.java:1949)
    at com.ibm.db2.jcc.am.wm.a(wm.java:2968)
    at com.ibm.db2.jcc.am.wm.a(wm.java:659)
    at com.ibm.db2.jcc.am.wm.executeQuery(wm.java:643)
    at Main.main(Main.java:78)
Caused by: java.io.UnsupportedEncodingException: [jcc][10275][10261]Unsupported ccsid, encoding, or locale: "65535".
    at com.ibm.db2.jcc.am.bb.a(bb.java:1125)
    at com.ibm.db2.jcc.t4.fc.e(fc.java:2242)
    ... 15 more

These are my libraries:

 db2jcc4.jar
 db2jcc_license_cisuz.jar

我的代码:


    public class Main
    {
        public static void main(String[] args) throws UnsupportedEncodingException
        {
            try
            {

                Class.forName("com.ibm.db2.jcc.DB2Driver");

            }
            catch (ClassNotFoundException e)
            {
                e.printStackTrace();
                return;
            }

            //DB2DataSource
            System.out.println("DB2 driver is loaded successfully");
            Connection conn = null;
            PreparedStatement pstmt = null;
            Statement statement = null;
            ResultSet rset = null;
            boolean found = false;

            try
            {
                Properties properties = new Properties();
                properties.put("user", "USER");         // Set user ID for connection
                properties.put("password", "password");     // Set password for connection
                String url = "jdbc:db2://myserver:446/mydb";

                conn = DriverManager.getConnection(url, properties);


                if (conn != null)
                {
                    System.out.println("DB2 Database Connected");
                }
                else
                {
                    System.out.println("Db2 connection Failed ");
                }


                String sql = "SELECT * FROM ZIPFILES.POLHDR;";
                statement = conn.createStatement();
                rset = statement.executeQuery(sql);


            }
            catch (SQLException e)
            {
                System.out.println("DB2 Database connection Failed");
                e.printStackTrace();
                return;
            }
        }
    }

additional info:

  1. the error is pointing at this line

    rset = statement.executeQuery(sql);
    
  2. DB2 AS/400 版本是 V4R4

  3. 表的编码是 CCSID 37,但我尝试将所有内容更改为该编码(例如 CP037、IBM037),但没有成功!我也尝试循环所有可能的编码(哈哈),但仍然没有运气!

最佳答案

根据错误消息,文件编码似乎是65535(即二进制数据),而不是37。

尝试将以下属性附加到连接字符串:translate binary=true;ccsid=37;

关于java - 通过 JDBC 进行 DB2 AS/400 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29507161/

相关文章:

java - Robocode - 如何计算战斗结束时赢得的回合?

java - SQL语法错误异常 : Column 'TEST' is either not in any table in the FROM list or appears within a join specification

java - 即使我将编码设置为 UTF-8,文件也不会以 UTF-8 编码保存

Python - 编码字符串 - 瑞典字母

java - 如何将捕获的图像路径从imageview保存到mysql数据库

java - 客户端无法从服务器接收UDP数据报

java - 在jetty(jetty-env.xml)中定义两个数据源

java - 是否有必要为每个连接从 JNDI 获取一个新的数据源?

java - 如何从java执行sql文件

java - Lucene 搜索问题