Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-7105

Oracle Thin Driver Fails with an Exception in Groovy 2.3.x

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Blocker
    • Resolution: Fixed
    • 2.3.0
    • 2.4.6
    • groovy-jdk, SQL processing
    • None

    Description

      Trying to load the Oracle driver in Groovy fails with the following error:

      java.lang.NoClassDefFoundError: oracle/xdb/XMLType
      at java_sql_Connection$getMetaData.call(Unknown Source)
      at db_test.printMetaData(db_test.groovy:9)
      at db_test.printMetaData(db_test.groovy)
      at db_test$printMetaData$0.callCurrent(Unknown Source)
      at db_test.run(db_test.groovy:45)
      Caused by: java.lang.ClassNotFoundException: oracle.xdb.XMLType
      ... 5 more

      This works in Groovy 2.1.x. This is loading the thin driver which doesn't require extra libraries. It appears that Groovy loads Oracle's OCI driver which requires these additional jar files and fails.

      import groovy.sql.Sql
      import java.sql.ResultSet
      import java.sql.DatabaseMetaData
      
      void printMetaData( Sql sql, catalog = null, schema = null ) {
          try {
              DatabaseMetaData metadata = sql.connection.getMetaData()
              
              ResultSet rs = metadata.getCatalogs()
              while( rs.next() ) {
                 String catalogName = rs.getString("TABLE_CAT")
                 println("${catalogName}")
              }
              rs.close()
              
              rs = metadata.getSchemas()
              while( rs.next() ) {
                 String catalogName = rs.getString("TABLE_CAT")
                 String schemaName = rs.getString("TABLE_SCHEM")
                 
                 println("${catalogName}.${schemaName}")
              }
              rs.close()
              
              def types = [ "TABLE" ]
              rs = metadata.getTables( catalog, schema, null, types.toArray( new String[types.size()]) )
              while( rs.next() ) {
                 String catalogName = rs.getString("TABLE_CAT")
                 String schemaName = rs.getString("TABLE_SCHEM")
                 String tableName = rs.getString("TABLE_NAME")
                 println("${catalogName}.${schemaName}.${tableName}")
              }
              rs.close()
          } finally {
              sql.close()
          }
      }
      
      oracle = Sql.newInstance("jdbc:oracle:thin:@//localhost:1521/PDB1", "someUser", "somePassword", "oracle.jdbc.driver.OracleDriver")
      
      printMetaData( oracle )
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              chubbard Charlie Hubbard
              Votes:
              1 Vote for this issue
              Watchers:
              10 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: