Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-7803

DefaultJdbcPrepareStatementStrategy Iterator fails on null value inserts

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.13.2
    • 2.12.5, 2.13.3, 2.14.1, 2.15.0
    • camel-jdbc
    • None
    • Patch Available
    • Unknown

    Description

      The iterator returned by createPopulateIterator in DefaultJdbcPrepareStatementStrategy incorrectly uses a next value of "null" to identify when it has run out of parameters. This fails when the parameter map intentionally contains a name with a null value, which is the case when some columns in an insert should be set to null. The attached pull request adds an explicit preFetch flag and relies on the done flag, avoiding the incorrect overloading of (next==null) to indicate completion.

      The iterator reports "hasNext() == false" when it encounters a map value of null. This happens when using the map header JDBC_PARAMETERS = "CamelJdbcParameters" to insert null values with a prepared statement. The Iterator ends prematurely when it reaches a parameter name with a null value.

      For example, passing in a map where the 3rd parameter of 19 has a value of null causes the following exception to be thrown:

      java.sql.SQLException: Number of parameters mismatch. Expected: 19, was:2
      at org.apache.camel.component.jdbc.DefaultJdbcPrepareStatementStrategy.populateStatement(DefaultJdbcPrepareStatementStrategy.java:137)
      at org.apache.camel.component.jdbc.JdbcProducer.doCreateAndExecuteSqlStatementWithHeaders(JdbcProducer.java:133)
      at org.apache.camel.component.jdbc.JdbcProducer.createAndExecuteSqlStatement(JdbcProducer.java:116)
      at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:85)

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            njiang Willem Jiang
            nathanwray Nathan Wray
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment