java - Java 程序抛出 CharConversionException?

标签 java

当我使用e.printStackTrace()进行打印时,我在catch block 中收到下面提到的错误;当我从DB2数据库读取它时,这只发生在少数记录上。所以基本上只有很少的记录会抛出错误,其余的工作正常。

我有近 1000 行代码,我不确定我应该从哪里开始才能理解/调试这个错误?我可以从错误消息中得到任何提示,我应该用它来解决它吗?

from the method getDataFromEMPHCForEmployeeDetails()----- com.ibm.db2.jcc.am.SqlException: [jcc][t4][1065][12306][3.63.123] Caught java.io.CharConversionException.  See attached Throwable for details. ERRORCODE=-4220, SQLSTATE=null
    at com.ibm.db2.jcc.am.fd.a(fd.java:663)
    at com.ibm.db2.jcc.am.fd.a(fd.java:60)
    at com.ibm.db2.jcc.am.fd.a(fd.java:112)
    at com.ibm.db2.jcc.am.ic.a(ic.java:2820)
    at com.ibm.db2.jcc.am.ic.p(ic.java:521)
    at com.ibm.db2.jcc.am.ic.N(ic.java:1558)
    at com.ibm.db2.jcc.am.vn.e(vn.java:1147)
    at com.ibm.db2.jcc.am.vn.getString(vn.java:1122)
    at com.ibm.db2.jcc.am.vn.getString(vn.java:1698)
    at CreateChart.getDataFromEMPHCForEmployeeDetails(CreateChart.java:330)
    at CreateChart.iterateDirectReportNamesFromArrayList(CreateChart.java:594)
    at CreateChart.getDataFromEMPHCForDirectReport(CreateChart.java:295)
    at CreateChart.iterateSecondLineManagerNamesFromArrayList(CreateChart.java:562)
    at CreateChart.getDataFromEMPHCForSecondLine(CreateChart.java:251)
    at CreateChart.iterateThirdLineManagerNamesFromArrayList(CreateChart.java:533)
    at CreateChart.getDataFromEMPHCForThirdLine(CreateChart.java:208)
    at CreateChart.iterateDirectorNamesFromArrayList(CreateChart.java:506)
    at CreateChart.getDataFromEMPHCForDirector(CreateChart.java:168)
    at CreateChart.iterateVPNamesFromArrayList(CreateChart.java:472)
    at CreateChart.getDataFromEMPHCForVp(CreateChart.java:126)
    at CreateChart.iterateFuncVPNamesFromArrayList(CreateChart.java:434)
    at CreateChart.getDataFromEMPHCForFuncVp(CreateChart.java:95)
    at CreateChart.main(CreateChart.java:613)
Caused by: java.nio.charset.MalformedInputException: Input length = 186
    at com.ibm.db2.jcc.am.t.a(t.java:19)
    at com.ibm.db2.jcc.am.ic.a(ic.java:2816)
    ... 19 more
Caused by: sun.io.MalformedInputException
    at sun.io.ByteToCharUTF8.convert(Unknown Source)
    at com.ibm.db2.jcc.am.t.a(t.java:16)
    ... 20 more

.

   public void getDataFromEMPHCForEmployeeDetails(String funcvp_name11, String vp_name11, String director_name11, String thirdline_name11, String secondline_name11, String directreport_name11){

        String myQuery11;
        if(directreport_name11 == ""){directreport_name11 = " AND DIRECT_REPORT IS NULL";}
        else{directreport_name11 =" AND DIRECT_REPORT ='"+ directreport_name11.replace("'", "''")+"'";}


        myQuery11 = "SELECT DISTINCT(SERIAL_NUM) FROM DB2INST1.EMP_HC  WHERE "+funcvp_name11+" "+vp_name11+" "+director_name11+" "+thirdline_name11+" "+ secondline_name11+""+directreport_name11;



        arraylistofEmployeeDetails = new ArrayList<String>();

    try {
         resultSet = st.executeQuery(myQuery11);

        while (resultSet.next()) 
        { 
            String SERIAL_NUM = resultSet.getString("SERIAL_NUM"); 


            if(SERIAL_NUM == null){SERIAL_NUM="";}

            if (SERIAL_NUM.length() > 40){SERIAL_NUM = "Too Long";}
            arraylistofEmployeeDetails.add(SERIAL_NUM);
            System.out.println(SERIAL_NUM+"\n");

        }

        if(! (arraylistofEmployeeDetails.isEmpty())){
        writeEmployeeDetailsToJsonFile(arraylistofEmployeeDetails);
        }

    } catch (SQLException e) {
        e.printStackTrace();

        StringWriter wtr = new StringWriter();
        PrintWriter pwtr = new PrintWriter(wtr);
        e.printStackTrace(pwtr);
        String stackTrace = wtr.toString();
        error_logs.append("from getDataFromEMPHCForEmployeeDetails()----- "+stackTrace+"\n");
    }

}

最佳答案

我在使用 1.8 Oracle Java 的 DB2 jdbc 驱动程序上遇到了类似的 CharConversionException 问题,并具有相同的错误代码,一旦更新到从未版本,它就可以正常工作。

我下载了db2jcc_license_cudb2jcc.jar从这些链接。

也许值得一试。

关于java - Java 程序抛出 CharConversionException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23098329/

相关文章:

java - 启动WAS7.0中部署的应用程序时出错

java - Java中的切片字符串

java - Android 的 Google 安全浏览的简单检查 URL?

java - 为什么 Java API 中的许多方法都有 "abstract"修饰符?

java - 我应该如何开始基于 Java 的 Web 开发?

java - 如果在静态初始化程序 block 中创建线程,程序将挂起

java - 如何处理java中方法签名的变化

java - Buffer如何使用 BufferedReader 通过 JAVA 获取 STDIN 线条颜色

java - 计算 int 中使用的位数

java - 在java中的首选项中更改true false