It looks as if com.mysql.cj.jdbc.Driver is not on your class path. If you are launching via SQLLine, you will need to edit the sqlline shell script to add a jar (or jars) to your class path.
Julian > On Oct 6, 2021, at 10:43 AM, Justin Swanhart <[email protected]> wrote: > > 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
