JIRA

  • Log In Access more options
    • Online Help
    • GreenHopper Help
    • Agile Answers
    • Use Agile By Default
    • Keyboard Shortcuts
    • About JIRA
    • JIRA Credits
    • What’s New
  • Dashboards Access more options (Alt+d)
  • Projects Access more options (Alt+p)
  • Issues Access more options (Alt+i)
  • Agile Access more options (Alt+g)
  • Create Issue
  • Mule
  • MULE-761

JdbcMessageDispatcher failure when performing a query with null parameters

  • Agile Board
  • More Actions
  • Views
    • XML
    • Word
    • Printable

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: None
  • Fix Version/s: 1.3.2
  • Component/s: Transport: JDBC
  • Labels:
    None
  • Environment:

    N/A

  • Log Output:
    Hide
     java.sql.SQLException: Invalid column type Query: INSERT INTO FPA.ESPECIES (rest of the query here)...

          at org.apache.commons.dbutils.QueryRunner.rethrow(QueryRunner.java:330)

          at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:399)

          at org.mule.providers.jdbc.JdbcMessageDispatcher.doDispatch(JdbcMessageDispatcher.java:98)

          at com.lumina.integration.mule.providers.jdbc.JdbcMessageDispatcher.doSend(JdbcMessageDispatcher.java:61)

          at org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:196)
    Show
     java.sql.SQLException: Invalid column type Query: INSERT INTO FPA.ESPECIES (rest of the query here)...       at org.apache.commons.dbutils.QueryRunner.rethrow(QueryRunner.java:330)       at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:399)       at org.mule.providers.jdbc.JdbcMessageDispatcher.doDispatch(JdbcMessageDispatcher.java:98)       at com.lumina.integration.mule.providers.jdbc.JdbcMessageDispatcher.doSend(JdbcMessageDispatcher.java:61)       at org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:196)
  • Similar Issues:
    None

Description

I'm trying to perform an insert on an Oracle Database. The problem I have is with null parameters to be passed to the statement.

The jdbc dispatcher performs a:

int nbRows = new QueryRunner().update(con, writeStmt, paramValues);

Looking at the QueryRunner code I can see that the update method invokes the fillStatement operation:

protected void fillStatement(PreparedStatement stmt, Object[] params) throws SQLException {

if (params == null) { return; }

for (int i = 0; i < params.length; i++) {

if (params[i] != null) { stmt.setObject(i + 1, params[i]); } else { stmt.setNull(i + 1, Types.OTHER); }

}

}

When a null value is found, the stmt.setNull(i + 1, Types.OTHER); is called and the following exception is thrown:

java.sql.SQLException: Invalid column type Query: INSERT INTO FPA.ESPECIES (rest of the query here)...

at org.apache.commons.dbutils.QueryRunner.rethrow(QueryRunner.java:330)

at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:399)

at org.mule.providers.jdbc.JdbcMessageDispatcher.doDispatch(JdbcMessageDispatcher.java:98)

at com.lumina.integration.mule.providers.jdbc.JdbcMessageDispatcher.doSend(JdbcMessageDispatcher.java:61)

at org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:196)

Apparently the error is because of the Types.OTHER sql type. I know that this is an issue involving Jakarta dbutils package but maybe someone has already got this problem and found a workaround to this.

At the Jakarta mailing list a workaround is mentioned by subclassing the QueryRunner class. In order to do that, I'll need to subclass the JDBC provider completely (the dispatcher and factory at least). Perhaps a custom QueryRunner could be injected to the JdbcMessageDispatcher in a future version.

Regards,

Juan Manuel

Issue Links

relates to

Improvement - An improvement or enhancement to an existing feature or task. MULE-491 Improve JdbcConnector to delegate calls to the ORM layer

  • Minor - Minor loss of function, or other problem where easy workaround is present.
  • Closed - The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.

Task - A task that needs to be done. MULE-1244 Upgrade to commons-dbutils-1.1

  • Minor - Minor loss of function, or other problem where easy workaround is present.
  • Closed - The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.

Activity

Ascending order - Click to sort in descending order
  • All
  • Comments
  • Work Log
  • History
  • Activity
  • Transitions
  • Commits
  • Source
  • Builds
Hide
Permalink
Alan Cassar added a comment - 22/Nov/06 04:18 AM

I have tried this simple insert query with the jdbc connector:
<property name="writeQuery" value="INSERT INTO table1 (name, place, ack) VALUES (${NOW}, NULL, 0)"/>

this worked fine for me without giving any exceptions.

should this issue be closed?

Show
Alan Cassar added a comment - 22/Nov/06 04:18 AM I have tried this simple insert query with the jdbc connector: <property name="writeQuery" value="INSERT INTO table1 (name, place, ack) VALUES (${NOW}, NULL, 0)"/> this worked fine for me without giving any exceptions. should this issue be closed?
Hide
Permalink
Alan Cassar added a comment - 22/Nov/06 04:26 AM

if we look at the JdbcNonTransactionalFunctionalTestCase integration test, there are loads of NULL parameters passed to the execSqlUpdate() method which in turns calls the QueryRunner.update() as specified in the post of Juan

Show
Alan Cassar added a comment - 22/Nov/06 04:26 AM if we look at the JdbcNonTransactionalFunctionalTestCase integration test, there are loads of NULL parameters passed to the execSqlUpdate() method which in turns calls the QueryRunner.update() as specified in the post of Juan
Hide
Permalink
Alan Cassar added a comment - 22/Nov/06 07:27 AM

added new test case which shows that null params work well

testcase name is: JdbcNullParamsTestCase

Show
Alan Cassar added a comment - 22/Nov/06 07:27 AM added new test case which shows that null params work well testcase name is: JdbcNullParamsTestCase
Hide
Permalink
Fabio Insaccanebbia added a comment - 23/Jan/07 04:30 AM

The original problem is an Oracle JDBC Driver problem...
Jakarta DbUtils has introduced a workaround in the 1.1 version

Show
Fabio Insaccanebbia added a comment - 23/Jan/07 04:30 AM The original problem is an Oracle JDBC Driver problem... Jakarta DbUtils has introduced a workaround in the 1.1 version
Hide
Permalink
kenneth westelinck added a comment - 23/Jan/07 04:41 AM

I had the same problem. Another workaround is to modify your query as described here: http://kennywest.blogspot.com/2006/11/development-empty-strings-in-oracle.html

Show
kenneth westelinck added a comment - 23/Jan/07 04:41 AM I had the same problem. Another workaround is to modify your query as described here: http://kennywest.blogspot.com/2006/11/development-empty-strings-in-oracle.html

People

  • Assignee:
    Alan Cassar
    Reporter:
    Juan Manuel Sanmarco
Vote (0)
Watch (0)

Dates

  • Created:
    12/Apr/06 10:37 AM
    Updated:
    23/Jan/07 04:42 AM
    Resolved:
    22/Nov/06 07:27 AM

Agile

  • View on Board
  • Atlassian JIRA (v5.0.7#734-sha1:8ad78a6)
  • Report a problem
  • Powered by a free Atlassian JIRA open source license for MuleForge. Try JIRA - bug tracking software for your team.