Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-501

Client and embedded drivers differ on invoking a procedure that returns a single Dynamic resultSet using CallableStatement.executeQuery()

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 10.0.2.1, 10.1.1.0
    • 10.2.1.6
    • JDBC
    • None
    • All Platforms
    • Release Note Needed

    Description

      It is possible to invoke a stored procedure that returns a single dynamic result using CallableStatement.executeQuery using Derby Client. The embedded JDBC driver, however, throws an exception like:

      Test starting ...url = jdbc:derby:tdb
      Exception in thread "main" ERROR X0Y78: Statement.executeQuery() cannot be called with a statement that returns a row count.
      at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:301)
      at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:434)
      at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1142)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1323)
      at org.apache.derby.impl.jdbc.EmbedCallableStatement.executeStatement(EmbedCallableStatement.java:109)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeQuery(EmbedPreparedStatement.java:241)
      at Test1.main(Test1.java:26)

      I think the embedded driver behavior is incorrect here, though I would double check that the JDBC spec says.

      To reproduce the problem,

      1) Create a database called 'tdb' and a table called COMPANY as create table COMPANY(name char(10));
      2) Insert two rows as: insert into COMPANY values 'IBM', 'SUN';
      3) register a procedure as:
      CREATE PROCEDURE GETALLCOMPANIES() PARAMETER STYLE JAVA LANGUAGE JAVA READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME 'Test.getAllCompanies'
      4) Set server classpath
      5) Compile two attached java programs, Test and Test1
      6) Execute 'java Test1 1' to run as a client program and 'java Test1 2' to run as an embedded program.

      Attachments

        1. Test1.java
          0.9 kB
          Satheesh E. Bandaram
        2. Test.java
          0.3 kB
          Satheesh E. Bandaram
        3. derby-501-v1.diff
          15 kB
          Knut Anders Hatlen
        4. derby-501-v1.stat
          0.3 kB
          Knut Anders Hatlen
        5. derby-501-v2.diff
          40 kB
          Knut Anders Hatlen
        6. derby-501-v2.stat
          0.6 kB
          Knut Anders Hatlen
        7. derby-501-v3.diff
          10 kB
          Knut Anders Hatlen
        8. derby-501-v3.stat
          0.5 kB
          Knut Anders Hatlen

        Issue Links

          Activity

            People

              knutanders Knut Anders Hatlen
              bandaram Satheesh E. Bandaram
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: