Topic
8 replies Latest Post - ‏2012-03-15T14:21:13Z by SUGS_Brian_Trapp
allen.montejo
allen.montejo
3 Posts
ACCEPTED ANSWER

Pinned topic Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

‏2010-11-05T15:35:48Z |
Hello Everyone,

We are having problem w/ retrieving data column that has special character from the db2 database. when we try to use the recordset.getString(columname) method we catch the exception below. Is there any workaround how to retrieve the data w/ out exception?

Error catch:

R com.ibm.db2.jcc.b.SqlException: jcct4106512306http://3.50.152 Caught java.io.CharConversionException. See attached Throwable for details. ERRORCODE=-4220, SQLSTATE=null

I tried also using getBytes method and catch different error which is :
Invalid data conversion: Wrong result column type for requested conversion. ERRORCODE=-4461, SQLSTATE=42815

anyone has the idea how to solve this problem?
Updated on 2012-03-15T14:21:13Z at 2012-03-15T14:21:13Z by SUGS_Brian_Trapp
  • sasami
    sasami
    11 Posts
    ACCEPTED ANSWER

    Re: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

    ‏2010-11-06T04:42:50Z  in response to allen.montejo
    Hmmm. May need goet more information from you to see what is going on here.
    Will it be too much trouble for asking the following:
    1. trace
    An example to turn on trace:
    ...
    private static String url = "jdbc:db2://xxxxxxxxxxxx.vmec.svl.ibm.com:446/STLEC1"
    +":traceFile=c:/temp/jdbc4.log"
    +";traceLevel="
    + com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL
    + ";";
    private static String user="xxxxxxxx";
    private static String password="yyyyyyyy";

    ...

    private Connection getConnection() {
    String driverClassName = "com.ibm.db2.jcc.DB2Driver";
    try {
    Class.forName( driverClassName ).newInstance();
    } catch (InstantiationException e) {

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

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

    e.printStackTrace();
    }
    try {
    return DriverManager.getConnection ( url,
    user,
    password);

    } catch (SQLException e) {

    e.printStackTrace();
    }
    return null;
    }

    2. what is the data type for the column ?
    3. your code which could reproduce the problem
    • allen.montejo
      allen.montejo
      3 Posts
      ACCEPTED ANSWER

      Re: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

      ‏2010-11-08T09:48:28Z  in response to sasami
      Hi Sasami,

      1. below is the log trace I catch.

      11/8/10 17:40:31:765 SGT 0000001d SystemErr R com.ibm.db2.jcc.b.SqlException: jcct4106512306http://3.50.152 Caught java.io.CharConversionException. See attached Throwable for details. ERRORCODE=-4220, SQLSTATE=null
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.db2.jcc.b.wc.a(wc.java:55)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.db2.jcc.b.wc.a(wc.java:111)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.db2.jcc.b.bc.a(bc.java:1766)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.db2.jcc.b.bc.n(bc.java:496)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.db2.jcc.b.bc.F(bc.java:1263)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.db2.jcc.b.jk.d(jk.java:939)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.db2.jcc.b.jk.getString(jk.java:917)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.db2.jcc.b.jk.getString(jk.java:1369)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.getString(WSJdbcResultSet.java:1848)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:463)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3129)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:238)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1433)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:93)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:394)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:274)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
      11/8/10 17:40:31:765 SGT 0000001d SystemErr R at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:152)
      11/8/10 17:40:31:781 SGT 0000001d SystemErr R at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:213)
      11/8/10 17:40:31:781 SGT 0000001d SystemErr R at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions(AbstractAsyncFuture.java:195)
      11/8/10 17:40:31:781 SGT 0000001d SystemErr R at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
      11/8/10 17:40:31:781 SGT 0000001d SystemErr R at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:194)
      11/8/10 17:40:31:781 SGT 0000001d SystemErr R at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:741)
      11/8/10 17:40:31:781 SGT 0000001d SystemErr R at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:863)
      11/8/10 17:40:31:781 SGT 0000001d SystemErr R at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)
      11/8/10 17:40:31:781 SGT 0000001d SystemErr R Caused by: java.nio.charset.MalformedInputException: Input length = 127
      at com.ibm.db2.jcc.b.u.a(u.java:19)
      at com.ibm.db2.jcc.b.bc.a(bc.java:1762)
      at com.ibm.db2.jcc.b.bc.n(bc.java:496)
      at com.ibm.db2.jcc.b.bc.F(bc.java:1263)
      at com.ibm.db2.jcc.b.jk.d(jk.java:939)
      at com.ibm.db2.jcc.b.jk.getString(jk.java:917)
      at com.ibm.db2.jcc.b.jk.getString(jk.java:1369)
      at com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.getString(WSJdbcResultSet.java:1848)
      at tools.knowledgegate.db.access.InventorDataAccess.findBySerialNumberAndCountryCode(InventorDataAccess.java)
      at tools.knowledgegate.http.model.PIHSearchReportHttpActionListener.actionPerformed(PIHSearchReportHttpActionListener.java:66)
      at tools.knowledgegate.http.servlet.BrokerServlet.performTask(BrokerServlet.java:216)
      at tools.knowledgegate.http.servlet.BrokerServlet.doPost(BrokerServlet.java:83)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
      at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966)
      at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
      at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:463)
      at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3129)
      at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:238)
      at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
      at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1433)
      at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:93)
      at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
      at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:394)
      at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:274)
      at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
      at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
      at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:152)
      at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:213)
      at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions(AbstractAsyncFuture.java:195)
      at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
      at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:194)
      at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:741)
      at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:863)
      at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)
      Caused by: sun.io.MalformedInputException
      at sun.io.ByteToCharUTF8.convert(ByteToCharUTF8.java:278)
      at com.ibm.db2.jcc.b.u.a(u.java:16)
      ... 34 more

      2. The data type of the column is Varchar , size = 256 , nullable = Yes

      3. I can reproduce the problem using below code
      System.out.println(recordset.getString("columname"));

      Have you experience such case? I tried to use the getBytes method too and it seems like it doesn't work.

      think and do something different, something has never been done and seen before..
      • sasami
        sasami
        11 Posts
        ACCEPTED ANSWER

        Re: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

        ‏2010-11-09T05:36:25Z  in response to allen.montejo
        Hi Allen,

        No. Unforturnatly I am not having any luck to recrete the problem.

        You know you are using a very very old JDBC driver: 3.50.152. Do you have to use a such old driver? The current driver is at 3.62.

        Anyway, I was thinking you may be able to get a trace like following so I can get more information about the problem:
        each line should starts with jcc, for example

        jccTime:2010-11-08-21:13:38.031Thread:mainResultSet@7fc07fc getString (2) called
        jccTime:2010-11-08-21:13:38.046Thread:mainResultSet@7fc07fc getString () returned 2010-11-08 21:13:37 PRÿCESS-1 2010-11-08 21:13:37.453

        So, you see the special character: ÿ
        is okay.
        Best regards,

        Sasami
        • allen.montejo
          allen.montejo
          3 Posts
          ACCEPTED ANSWER

          Re: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

          ‏2011-01-07T19:50:15Z  in response to sasami
          can you guide me where I could download the latest db2 jdbc driver? I will try to upgrade my local copy and I will try if that will fix the problem.
          • sasami
            sasami
            11 Posts
            ACCEPTED ANSWER

            Re: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

            ‏2011-01-08T05:12:22Z  in response to allen.montejo
            db2 jdbc driver comes w/ db2. If you are not using a very old db2, it is possible that the classpath points to a very old copy of db2jcc.jar. The trace tells DB2 release/version, classpath, etc.

            If you are just running a simple stand-alone java application which uses jdbc APIs, you may posting your code here.

            If you are running some kind of tool which invokes db2, you may still turn jcc trace on dynamically using JVM argument:

            -Ddb2.jcc.propertiesFile=jcc.properties
            following is an example of jcc.properties file:

            db2.jcc.override.traceDirectory=/temp/jcctrace
            db2.jcc.override.traceFile=trace
            db2.jcc.override.traceFileAppend=false
            db2.jcc.override.traceLevel=-1
            Regards,

            -
            • SUGS_Brian_Trapp
              SUGS_Brian_Trapp
              2 Posts
              ACCEPTED ANSWER

              Re: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

              ‏2012-03-15T13:43:22Z  in response to sasami
              I know this is an old thread, but I just ran across this and wanted to share the fix suggested by one of our friendly DBAs.

              This link discusses the problem, https://www-304.ibm.com/support/docview.wss?uid=swg21412846 but the way we were able to work around it locally was to use the java command line argument "-Ddb2.jcc.charsetDecoderEncoder=3" which maps the funky chars to null on the way out of the DB.

              -B. Trapp
              • jguillaumes
                jguillaumes
                8 Posts
                ACCEPTED ANSWER

                Re: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

                ‏2012-03-15T13:49:40Z  in response to SUGS_Brian_Trapp
                You can also cast the column to CHAR FOR BIT DATA and do the conversion in code.
            • SUGS_Brian_Trapp
              SUGS_Brian_Trapp
              2 Posts
              ACCEPTED ANSWER

              Re: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null

              ‏2012-03-15T14:21:13Z  in response to sasami
              I know this is an old thread, but I just ran across this and wanted to share the fix suggested by one of our friendly DBAs.

              This link discusses the problem, https://www-304.ibm.com/support/docview.wss?uid=swg21412846 but the way we were able to work around it locally was to use the java command line argument "-Ddb2.jcc.charsetDecoderEncoder=3" which maps the funky chars to null on the way out of the DB.

              -B. Trapp