You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Pascal Schumacher (JIRA)" <ji...@apache.org> on 2016/01/15 19:18:39 UTC

[jira] [Resolved] (GROOVY-7105) Oracle Thin Driver Fails with an Exception in Groovy 2.3.x

     [ https://issues.apache.org/jira/browse/GROOVY-7105?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Pascal Schumacher resolved GROOVY-7105.
---------------------------------------
       Resolution: Fixed
    Fix Version/s: 2.4.6

Pull request merged. Thanks!

> Oracle Thin Driver Fails with an Exception in Groovy 2.3.x
> ----------------------------------------------------------
>
>                 Key: GROOVY-7105
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7105
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-jdk, SQL processing
>    Affects Versions: 2.3.0
>            Reporter: Charlie Hubbard
>            Priority: Blocker
>             Fix For: 2.4.6
>
>
> 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.
> {code}
> 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 )
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)