ClassNotFoundException:com.mysql.jdbc.GoogleDriver

问题描述 投票:0回答:3

我想知道在 APP ENGINE 中托管我的项目时为什么会抛出此错误,我添加了大量日志记录只是为了分析。当我使用本地 ip 来使用 com.mysql.jdbc.Driver 时,它可以工作。请帮忙!!

    String name = "Vinodh";
    String url = null;
    try {
        Class.forName("com.mysql.jdbc.GoogleDriver");
        url = "jdbc:google:mysql://xxxxxxx:xxxxxx/vinodh?user=root&password=xxxxxx";

        // Statements allow to issue SQL queries to the database
        log.info("Initiate Connection");
        Connection conn = DriverManager.getConnection(url);
        log.info("Got Connection");
        Statement statement = conn.createStatement();
        // Result set get the result of the SQL query
        ResultSet resultSet = statement

                .executeQuery("select * from Family");
        log.info("Entering While");
        while(resultSet.next()){
             log.info("Entered While");
            String test = resultSet.getString("Name");
            System.out.println(test);

            name = test+test+test;
        }
mysql mysql-workbench
3个回答
2
投票

如本教程所示,在开发过程中,您应该使用普通的 mysql 驱动程序,并且只有 appengine 使用 Google mysql 驱动程序

  if (SystemProperty.environment.value() ==
      SystemProperty.Environment.Value.Production) {
    // Load the class that provides the new "jdbc:google:mysql://" prefix.
    Class.forName("com.mysql.jdbc.GoogleDriver");
    url = "jdbc:google:mysql://your-project-id:your-instance-name/guestbook?user=root";
  } else {
    // Local MySQL instance to use during development.
    Class.forName("com.mysql.jdbc.Driver");
    url = "jdbc:mysql://127.0.0.1:3306/guestbook?user=root";
  }

还要仔细检查您是否已为您的应用程序启用 MySQL Connector/J(默认情况下未启用)

https://developers.google.com/appengine/docs/java/cloud-sql/#enable_connector_j

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  ...
  <use-google-connector-j>true</use-google-connector-j>
</appengine-web-app>

1
投票

显然他们悄悄地删除了这个。它甚至不再出现在

appengine-web.xml
的文档中。

使用标准

com.mysql.jdbc.Driver
但更新您的 JDBC URL:

jdbc:mysql://google/[your-db-schema]
   ?user=root
   &password=[your-db-passord]
   &socketFactory=com.google.cloud.sql.mysql.SocketFactory
   &cloudSqlInstance=[your-db-project-id]:[your-db-region]:[your-db-intance]

也添加到你的 gradle 中:

dependencies {
   ...
   implementation("mysql:mysql-connector-java:8.0.29")
   implementation("com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.5.0")
}

注意 URI 中的“google”。文档中没有任何地方说您需要它,但您必须这样做。

Github官方页面指南


0
投票

我的 App Engine Java 11 2023 解决方案

我从这个answer开始并遵循此文档:docs

首先添加对gradle的依赖:

implementation('mysql:mysql-connector-java:8.0.33')
implementation('com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.11.0')

然后您可以通过以下方式连接到 Cloud SQL:

Class.forName("com.mysql.cj.jdbc.Driver"); //com.mysql.cj.jdbc.Driver is deprecated

String jdbcUrl = "jdbc:mysql:///<DATABASE_NAME>?" 
               + "cloudSqlInstance=<INSTANCE_CONNECTION_NAME>" 
               + "&socketFactory=com.google.cloud.sql.mysql.SocketFactory" 
               + "&user=<MYSQL_USER_NAME>" 
               + "&password=<MYSQL_USER_PASSWORD>";

//now can use your connection string..for example:
DriverManager.getConnection(jdbcUrl, <MYSQL_USER_NAME>, <MYSQL_USER_PASSWORD>)

cloudSqlInstance 是实例连接名称(可在实例详细信息页面找到)。它类似于project_id:cloud_sql_zone:cloud_sql_name

© www.soinside.com 2019 - 2024. All rights reserved.