[
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)