java.lang.RuntimeException:找不到类 com.mysql.cj.jdbc.Driver

Posted

技术标签:

【中文标题】java.lang.RuntimeException:找不到类 com.mysql.cj.jdbc.Driver【英文标题】:java.lang.RuntimeException: Class com.mysql.cj.jdbc.Driver not found 【发布时间】:2020-07-06 21:56:27 【问题描述】:

我在 python 中使用 JDBC 与 JayDeBeApi 连接到 mysql

def data_JDBC(db_name, table, db, user, pwd):
    
    db = db.lower()
    db_name = db_name.lower()
    print(db)
    if db == 'postgresql':
        sql_str = f"select * from db.table"
        host='ec2-18-191-149-107.us-east-2.compute.amazonaws.com'
        port='5432'
        user=user
        pwd = pwd
        driver_name = 'org.postgresql.Driver'
        driver_path = 'path/to/postgresql-42.2.12.jar'        
    elif db == 'mysql':
        sql_str = f"select * from table"
        host='localhost'
        port='3306'
        user=user
        pwd = ""
        driver_name = 'com.mysql.cj.jdbc.Driver'
        driver_path = 'path/to/mysql-connector-java-8.0.20.jar'
        print(driver_path)
    connection_string=f'jdbc:db://'+ host+':'+ port +'/'+ db_name+'?useSSL=false&&serverTimezone=UTC&useLegacyDatetimeCode=false'
    if jpype.isJVMStarted() and not jpype.isThreadAttachedToJVM():
        jpype.attachThreadToJVM()
        jpype.java.lang.Thread.currentThread().setContextClassLoader(jpype.java.lang.ClassLoader.getSystemClassLoader())
    conn = jaydebeapi.connect(driver_name, connection_string,[user, pwd], jars=driver_path)
    frame = pd.read_sql(sql_str, conn);
    pd.set_option('display.expand_frame_repr', False)
    conn.close()
    return frame

这个函数返回一个 Pandas DataFrame,我在同一目录中有 jar 文件。 PostgreSQL 工作正常,但是当我选择 MySQL 时出现此错误:

java.lang.RuntimeExceptionPyRaisable      Traceback (most recent call last)
<ipython-input-426-311d4ecabc53> in <module>
----> 1 dfMysql=data_JDBC(db_name='fuentedatos', table='tests', db='MySql', user='root', pwd='')
      2 dfMysql

...

java.lang.RuntimeExceptionPyRaisable: java.lang.RuntimeException: Class com.mysql.cj.jdbc.Driver not found

这就是我执行函数的方式:

data_JDBC(db_name='fuentedatos', table='tests', db='MySql', user='root', pwd='')

【问题讨论】:

您在 Google com.mysql.cj.jdbc.Driver not found 上登记了吗?可能你必须安装一些 Java 类来连接 MySQL。 path/to/mysql-connector-java-8.0.20.jar 是有效路径吗?驱动是否存在? 是的,这是一条有效的路径,我很确定。我尝试使用 2 个 jar 版本,8.0.20.jar 和 8.0.18.jar。他们都没有工作。我从这里下载了它们dev.mysql.com/downloads/connector/j 【参考方案1】:

对于特定的错误情况,有两个潜在的错误原因。

1- 通常在 Java 世界中,当我们没有将 jar 文件的路径添加到 CLASSPATH 环境变量时会引发 java.lang.RuntimeException: Class driverClassName not found 异常,而这正是我们试图解释的 here

2-(最有可能的)Jaydebeapi好像不支持同时为不同的数据源建立多个连接(github issue)。

【讨论】:

【参考方案2】:

我遇到这个问题是因为我不小心同时使用了2个容器,请确保只有一个容器处于活动状态才能打开本地目录。

【讨论】:

以上是关于java.lang.RuntimeException:找不到类 com.mysql.cj.jdbc.Driver的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 按钮导致崩溃

添加 ImageView 时应用程序崩溃?