Java 无法使用eclipse连接到Google Cloud SQL

Java 无法使用eclipse连接到Google Cloud SQL,java,jdbc,google-cloud-sql,Java,Jdbc,Google Cloud Sql,我从eclipse连接到数据库时遇到问题。mysql java连接器和mysql套接字工厂连接器jar文件包含在构建路径中。我不确定是什么导致了NoClassDefFound错误。凭证是正确的,并且在代码中被省略 我的代码: import java.sql.*; public class TestConnect { private static String instanceConnectionName = "sampleInstanceName"; private static Strin

我从eclipse连接到数据库时遇到问题。mysql java连接器和mysql套接字工厂连接器jar文件包含在构建路径中。我不确定是什么导致了NoClassDefFound错误。凭证是正确的,并且在代码中被省略

我的代码:

import java.sql.*;

public class TestConnect {

private static String instanceConnectionName = "sampleInstanceName";
private static String databaseName = "sampleDatabaseName";
private static Connection connection = null;
private static String userName="sampleUserName";
private static String password="samplePassword";
private static String dbURL = String.format("jdbc:mysql://google/%s?cloudSqlInstance=%s&"
                                + "socketFactory=com.google.cloud.sql.mysql.SocketFactory",
                                databaseName, instanceConnectionName);

public static void main(String[] args) {
    // TODO Auto-generated method stub
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (Exception e) {
                System.out.println("Where is your MySQL JDBC Driver?");
                e.printStackTrace();
                return;
            }
            System.out.println("MySQL JDBC Driver Registered!");
            CreateConnection();
    }

    public static void CreateConnection() {
            try {
            // connect 
                connection = DriverManager.getConnection(dbURL,userName, password); 
            } catch (SQLException ex) {
                System.out.println("Connection Failed! Check output console");
                ex.printStackTrace();
            }
        }

}
以下是pom.xml文件:

  <dependencies>
<!-- https://mvnrepository.com/artifact/com.google.cloud.sql/mysql-socket-factory -->
<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>mysql-socket-factory</artifactId>
    <version>1.0.4</version>
</dependency>
<dependency>                        <!-- http://dev.mysql.com/doc/connector-j/en/ -->
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.44</version>
</dependency>

  </dependencies>
</project>

com.google.cloud.sql
mysql插座工厂
1.0.4
mysql
mysql连接器java
5.1.44
下面是错误消息:

java.sql.SQLException: java.lang.NoClassDefFoundError: com/mysql/cj/api/io/SocketFactory
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:877)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:873)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:443)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at TestConnect.CreateConnection(TestConnect.java:32)
    at TestConnect.main(TestConnect.java:26)
Caused by: java.lang.NoClassDefFoundError: com/mysql/cj/api/io/SocketFactory
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.mysql.jdbc.MysqlIO.createSocketFactory(MysqlIO.java:3328)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:296)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2222)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2017)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: com.mysql.cj.api.io.SocketFactory
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 32 more
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Preconditions
    at com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:41)
    at com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:57)
    at com.mysql.cj.mysqla.MysqlaSession.connect(MysqlaSession.java:122)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1726)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1596)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:633)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:347)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:219)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at TestConnect.CreateConnection(TestConnect.java:30)
    at TestConnect.main(TestConnect.java:24)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Preconditions
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 12 more
java.sql.SQLException:java.lang.NoClassDefFoundError:com/mysql/cj/api/io/SocketFactory
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:877)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:873)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:443)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
在TestConnect.CreateConnection(TestConnect.java:32)
位于TestConnect.main(TestConnect.java:26)
原因:java.lang.NoClassDefFoundError:com/mysql/cj/api/io/SocketFactory
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClass(未知源)
位于java.security.SecureClassLoader.defineClass(未知源)
位于java.net.URLClassLoader.defineClass(未知源)
位于java.net.URLClassLoader.access$100(未知来源)
位于java.net.URLClassLoader$1.run(未知源)
位于java.net.URLClassLoader$1.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于sun.misc.Launcher$AppClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(未知源)
位于com.mysql.jdbc.MysqlIO.createSocketFactory(MysqlIO.java:3328)
在com.mysql.jdbc.MysqlIO上(MysqlIO.java:296)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2222)
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2017)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:779)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:425)
... 还有6个
原因:java.lang.ClassNotFoundException:com.mysql.cj.api.io.SocketFactory
位于java.net.URLClassLoader.findClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于sun.misc.Launcher$AppClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
... 32多
更新

我更新了jar文件,删除了不必要的文件,并相应地更新了pom文件

以下是新的pom文件:

  <dependencies>
<!-- https://mvnrepository.com/artifact/com.google.cloud.sql/mysql-socket-factory-connector-j-6 -->
<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>mysql-socket-factory-connector-j-6</artifactId>
    <version>1.0.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.cloud.sql/jdbc-socket-factory-core -->
<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>jdbc-socket-factory-core</artifactId>
    <version>1.0.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>   
  </dependencies>

com.google.cloud.sql
mysql-socket-factory-connector-j-6
1.0.4
com.google.cloud.sql
jdbc套接字工厂核心
1.0.4
mysql
mysql连接器java
6.0.6
下面是新的错误消息:

java.sql.SQLException: java.lang.NoClassDefFoundError: com/mysql/cj/api/io/SocketFactory
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:877)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:873)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:443)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at TestConnect.CreateConnection(TestConnect.java:32)
    at TestConnect.main(TestConnect.java:26)
Caused by: java.lang.NoClassDefFoundError: com/mysql/cj/api/io/SocketFactory
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.mysql.jdbc.MysqlIO.createSocketFactory(MysqlIO.java:3328)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:296)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2222)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2017)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: com.mysql.cj.api.io.SocketFactory
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 32 more
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Preconditions
    at com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:41)
    at com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:57)
    at com.mysql.cj.mysqla.MysqlaSession.connect(MysqlaSession.java:122)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1726)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1596)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:633)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:347)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:219)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at TestConnect.CreateConnection(TestConnect.java:30)
    at TestConnect.main(TestConnect.java:24)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Preconditions
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 12 more
线程“main”java.lang.NoClassDefFoundError中的异常:com/google/common/base/premissions 位于com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:41) 位于com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:57) 位于com.mysql.cj.mysqla.MysqlaSession.connect(MysqlaSession.java:122) 位于com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1726) 位于com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1596) 位于com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:633) 位于com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:347) 位于com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:219) 位于java.sql.DriverManager.getConnection(未知源) 位于java.sql.DriverManager.getConnection(未知源) 在TestConnect.CreateConnection(TestConnect.java:30) 位于TestConnect.main(TestConnect.java:24) 原因:java.lang.ClassNotFoundException:com.google.common.base.Premissions 位于java.net.URLClassLoader.findClass(未知源) 位于java.lang.ClassLoader.loadClass(未知源) 位于sun.misc.Launcher$AppClassLoader.loadClass(未知源) 位于java.lang.ClassLoader.loadClass(未知源) ... 还有12个
com.mysql.cj.api.io.SocketFactory是mysql Connector/J版本6的一部分。这是SocketFactory在mysql-socket-factory-connector-j-6中使用的。但是,您共享的pom.xml使用的是
mysql套接字工厂
,它是版本5的数据包,不应该使用它

您以前是否使用过
mysql-socket-factory-connector-j-6
,并且从那时起它就在您的库中?这可能导致错误加载v6 SocketFactory,从而导致此问题。如果是这样,请尝试
mvnclean
以摆脱旧的jar文件,然后再次尝试运行