程序在Java中抛出CharConversionException?

时间:2014-04-16 03:12:12

标签: java

当我使用e.printStackTrace();进行打印时,我在catch块中得到了下面提到的错误。当我从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");
    }

}

2 个答案:

答案 0 :(得分:0)

我在DB2 jdbc驱动程序上使用具有相同错误代码的1.8 Oracle Java的CharConversionException有类似问题,一旦更新为永不正常的版本,它就可以正常运行。

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

也许值得尝试。

答案 1 :(得分:0)

尝试添加JVM参数-Ddb2.jcc.charsetDecoderEncoder=3,它为我解决了这个问题。

设置参数db2.jcc.charsetDecoderEncoder=3后,遇到非UTF8字符时不会引发异常,而是将其替换为等效的Unicode替换字符。

有关更多详细信息,请参阅IBM支持文章https://www.ibm.com/support/pages/sqlexception-message-caught-javaiocharconversionexception-and-errorcode-4220