无法通过Java eclipse连接到Google云SQL
我使用我的实例google cloud sql数据库从eclipse连接到数据库时遇到问题。 我成功地通过mysql命令行访问了数据库,但在eclise中没有 我的代码:无法通过Java eclipse连接到Google云SQL,java,google-cloud-datastore,google-cloud-sql,Java,Google Cloud Datastore,Google Cloud Sql,我使用我的实例google cloud sql数据库从eclipse连接到数据库时遇到问题。 我成功地通过mysql命令行访问了数据库,但在eclise中没有 我的代码: String instanceConnectionName = "****"; String databaseName = "****"; String username = "***"; String password = "***"; String jdbcUrl = String.format(
String instanceConnectionName = "****";
String databaseName = "****";
String username = "***";
String password = "***";
String jdbcUrl = String.format(
"jdbc:mysql://google/%s?cloudSqlInstance=%s&"
+ "socketFactory=com.google.cloud.sql.mysql.SocketFactory",
databaseName,
instanceConnectionName);
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
我得到的错误是:
jdbc:mysql://google/****?cloudSqlInstance=****e&socketFactory=com.google.cloud.sql.mysql.SocketFactory
May 03, 2017 10:53:07 AM com.google.cloud.sql.mysql.SocketFactory connect
INFO: Connecting to Cloud SQL instance [****].
May 03, 2017 10:53:07 AM com.google.cloud.sql.mysql.SslSocketFactory getInstance
INFO: First Cloud SQL connection, generating RSA key pair.
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
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:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:917)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2332)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
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:404)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at neviTracker.program.ProgramConnections.main(ProgramConnections.java:27)
Caused by: java.lang.RuntimeException: Unable to obtain credentials to communicate with the Cloud SQL API
at com.google.cloud.sql.mysql.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:545)
at com.google.cloud.sql.mysql.SslSocketFactory.getInstance(SslSocketFactory.java:138)
at com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:47)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:298)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)
... 13 more
Caused by: java.io.IOException: The Application Default Credentials are not available. They are available if running on Google App Engine, Google Compute Engine, or Google Cloud Shell. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
at com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredential(DefaultCredentialProvider.java:98)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:213)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:191)
at com.google.cloud.sql.mysql.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:543)
... 18 more
jdbc:mysql://google/****?cloudSqlInstance=**e&socketFactory=com.google.cloud.sql.mysql.socketFactory
2017年5月3日上午10:53:07 com.google.cloud.sql.mysql.SocketFactory connect
信息:正在连接到云SQL实例[**]。
2017年5月3日上午10:53:07 com.google.cloud.sql.mysql.SslSocketFactory getInstance
信息:第一个云SQL连接,生成RSA密钥对。
线程“main”com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException中出现异常:无法创建到数据库服务器的连接。
位于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:404)
位于com.mysql.jdbc.Util.getInstance(Util.java:387)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:917)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2332)
位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:795)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:44)
位于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:404)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
位于neviTracker.program.ProgramConnections.main(ProgramConnections.java:27)
原因:java.lang.RuntimeException:无法获取与云SQL API通信的凭据
位于com.google.cloud.sql.mysql.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:545)
位于com.google.cloud.sql.mysql.SslSocketFactory.getInstance(SslSocketFactory.java:138)
位于com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:47)
在com.mysql.jdbc.MysqlIO(MysqlIO.java:298)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)
... 还有13个
原因:java.io.IOException:应用程序默认凭据不可用。如果在谷歌应用程序引擎、谷歌计算引擎或谷歌云外壳上运行,则可以使用它们。否则,必须定义指向定义凭据的文件的环境变量GOOGLE\u APPLICATION\u CREDENTIALS。看见https://developers.google.com/accounts/docs/application-default-credentials 了解更多信息。
在com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredential(DefaultCredentialProvider.java:98)
位于com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:213)
位于com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:191)
位于com.google.cloud.sql.mysql.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:543)
... 还有18个
您收到一条错误消息,表明未设置环境变量GOOGLE\u APPLICATION\u CREDENTIALS
。请在根文件夹中创建一个.credentials
文件,并在其中添加您的凭据详细信息
请参考此链接
您收到一条错误消息,表明未设置环境变量
GOOGLE\u APPLICATION\u CREDENTIALS
。请在根文件夹中创建一个.credentials
文件,并在其中添加您的凭据详细信息
请参考此链接
应用程序默认凭据不可用。如果在谷歌应用程序引擎、谷歌计算引擎或谷歌云外壳上运行,则可以使用它们。否则,必须定义指向定义凭据的文件的环境变量GOOGLE\u APPLICATION\u CREDENTIALS。有关更多信息,请参阅
您需要凭据才能访问google cloud sql。您可以从
创建凭证后,创建密钥文件并将其指向bash_配置文件(有关更多信息,请阅读块引号)。那么它应该会起作用
或者,您可以使用云SQL PROXY不使用环境变量,请按照此链接中的步骤操作,如果有不清楚的地方,请询问。
希望这有帮助
应用程序默认凭据不可用。如果在谷歌应用程序引擎、谷歌计算引擎或谷歌云外壳上运行,则可以使用它们。否则,必须定义指向定义凭据的文件的环境变量GOOGLE\u APPLICATION\u CREDENTIALS。有关更多信息,请参阅
您需要凭据才能访问google cloud sql。您可以从
创建凭证后,创建密钥文件并将其指向bash_配置文件(有关更多信息,请阅读块引号)。那么它应该会起作用
或者,您可以使用云SQL PROXY不使用环境变量,请按照此链接中的步骤操作,如果有不清楚的地方,请询问。
希望这有帮助。您是否确保您的MySQL服务已启动并运行?是@patateskafadid,您是否确保