I am probably making some obvious mistake, but I am having a problem
getting a simple MySQL JDBC connection working.

I have the latest version of the Connector/J MySQL java client driver.  I
have a MySQL 8 server running on the local machine, and the following model
JSON:
{
  version: '1.0',
  defaultSchema: 'ssb',
  schemas: [
    {
      name: 'ssb',
      type: 'custom',
      factory: 'org.apache.calcite.adapter.jdbc.JdbcSchema$Factory',
      operand: {
        jdbcDriver: 'com.mysql.cj.jdbc.Driver',
        jdbcUrl: 'jdbc:mysql://localhost/ssb',
        jdbcUser: 'root',
        jdbcPassword: ''
      }
    }
  ]
}

I have the MySQL driver in my CLASSPATH. I can compile a simple test
program which verifies that the class com.mysql.jdbc.Driver exists.

While the test program works, sqlline does not:
$ ./sqlline -d com.mysql.cj.jdbc.Driver -u jdbc:mysql://root@localhost/ssb
Building Apache Calcite 1.28.0-SNAPSHOT
scan complete in 1ms
Could not find driver com.mysql.cj.jdbc.Driver

Any suggestions about what I might be doing wrong?

Using the !connect command yields a large backtrace (while probably not
useful, included for completeness):
sqlline version 1.11.0
sqlline> !connect jdbc:calcite:model=test.json admin admin
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.protobuf.UnsafeUtil
(file:/home/justin/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protobuf-java/3.6.1/d06d46ecfd92ec6d0f3b423b4cd81cb38d8b924/protobuf-java-3.6.1.jar)
to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of
com.google.protobuf.UnsafeUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal
reflective access operations
WARNING: All illegal access operations will be denied in a future release
java.lang.RuntimeException: Error instantiating JsonCustomSchema(name=ssb)
at org.apache.calcite.model.ModelHandler.visit(ModelHandler.java:277)
at
org.apache.calcite.model.JsonCustomSchema.accept(JsonCustomSchema.java:66)
at org.apache.calcite.model.ModelHandler.visit(ModelHandler.java:200)
at org.apache.calcite.model.ModelHandler.<init>(ModelHandler.java:106)
at org.apache.calcite.jdbc.Driver$1.onConnectionInit(Driver.java:101)
at
org.apache.calcite.avatica.UnregisteredDriver.connect(UnregisteredDriver.java:139)
at sqlline.DatabaseConnection.connect(DatabaseConnection.java:135)
at sqlline.DatabaseConnection.getConnection(DatabaseConnection.java:192)
at sqlline.Commands.connect(Commands.java:1481)
at sqlline.Commands.connect(Commands.java:1355)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:44)
at sqlline.SqlLine.dispatch(SqlLine.java:818)
at sqlline.SqlLine.begin(SqlLine.java:596)
at sqlline.SqlLine.start(SqlLine.java:269)
at sqlline.SqlLine.main(SqlLine.java:208)
Caused by: com.google.common.util.concurrent.UncheckedExecutionException:
java.lang.RuntimeException: java.sql.SQLException: Cannot load JDBC driver
class 'com.mysql.cj.jdbc.Driver'
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2051)
at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
at
com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958)
at
com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964)
at
org.apache.calcite.adapter.jdbc.JdbcUtils$DialectPool.get(JdbcUtils.java:116)
at
org.apache.calcite.adapter.jdbc.JdbcSchema.createDialect(JdbcSchema.java:200)
at org.apache.calcite.adapter.jdbc.JdbcSchema.create(JdbcSchema.java:136)
at org.apache.calcite.adapter.jdbc.JdbcSchema.create(JdbcSchema.java:123)
at org.apache.calcite.adapter.jdbc.JdbcSchema.create(JdbcSchema.java:175)
at
org.apache.calcite.adapter.jdbc.JdbcSchema$Factory.create(JdbcSchema.java:570)
at org.apache.calcite.model.ModelHandler.visit(ModelHandler.java:272)
... 18 more
Caused by: java.lang.RuntimeException: java.sql.SQLException: Cannot load
JDBC driver class 'com.mysql.cj.jdbc.Driver'
at
org.apache.calcite.adapter.jdbc.JdbcUtils$DialectPool.dialect(JdbcUtils.java:101)
at
com.google.common.cache.CacheLoader$FunctionToCacheLoader.load(CacheLoader.java:165)
at
com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
at
com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
... 29 more
Caused by: java.sql.SQLException: Cannot load JDBC driver class
'com.mysql.cj.jdbc.Driver'
at
org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:489)
at
org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:599)
at
org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:809)
at
org.apache.calcite.adapter.jdbc.JdbcUtils$DialectPool.dialect(JdbcUtils.java:94)
... 34 more
Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
at
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at
org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:483)
... 37 more

Reply via email to