Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-774

Executing native queries with Firebird

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.1.0, 1.2.0, 1.3.0, 2.0.0-M2
    • 1.3.0, 2.0.0-beta3
    • sql
    • None
    • Tomcat 5.5, OpenJPA 1.1.0, Firebird 2.1

    Description

      Native queries cannot be executed with Firebird database. The following exception occur:
      DEBUG - Log4JLogFactory$LogAdapter.trace(72) | Executing query: [insert into ANAGRAFICHE (COD_TITOLARE, NOME, CODICE_FISCALE, DATA_NASCITA) values (?, ?, ?, ?)] with parameters:

      {2=xz0FEdrz92sd, 0=43, 3=Tue Aug 30 00:00:00 UTC 1644, 1=B95JHSkDV}

      WARN - GeronimoConnectionEventListener.connectionErrorOccurred(88) | connectionErrorOccurred called with null
      org.firebirdsql.jdbc.FBSQLException: You cannot set value of an non-existing parameter.
      at org.firebirdsql.jdbc.FBProcedureCall$NullParam.setValue(FBProcedureCall.java:424)
      at org.firebirdsql.jdbc.AbstractCallableStatement.setLong(AbstractCallableStatement.java:1094)
      at org.tranql.connector.jdbc.PreparedStatementHandle.setLong(PreparedStatementHandle.java:247)
      at org.apache.ode.utils.LoggingStatementWrapper.setLong(LoggingStatementWrapper.java:495)
      at org.apache.openjpa.lib.jdbc.DelegatingCallableStatement.setLong(DelegatingCallableStatement.java:299)
      at org.apache.openjpa.jdbc.sql.DBDictionary.setLong(DBDictionary.java:998)
      at org.apache.openjpa.jdbc.sql.DBDictionary.setUnknown(DBDictionary.java:1283)
      at org.apache.openjpa.jdbc.sql.SQLBuffer.setParameters(SQLBuffer.java:568)
      at org.apache.openjpa.jdbc.kernel.SQLStoreQuery$SQLExecutor.executeUpdate(SQLStoreQuery.java:231)
      at org.apache.openjpa.kernel.QueryImpl.update(QueryImpl.java:1038)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:808)
      at org.apache.openjpa.kernel.QueryImpl.updateAll(QueryImpl.java:883)
      at org.apache.openjpa.kernel.DelegatingQuery.updateAll(DelegatingQuery.java:573)
      at org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:319)

      Exception is thrown because for "insert" statement prepareCall is executed instead of prepareStatement. For other databases it is the same, but Firebird's FBProcedureCall is not the same as FBPreparedStatement. Patch for issue follows.

      Attachments

        1. OPENJPA-774.patch
          0.7 kB
          Alexey Ousov

        Issue Links

          Activity

            People

              kwsutter Kevin W. Sutter
              doubleaxe Alexey Ousov
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: