如何解决通过JDBC使用Compute Engine连接到Cloud SQL
我到目前为止所做的事情:
- 设置我的Compute Engine
- 将Compute Engine连接到Cloud sql
- 在我的Compute Engine上安装并运行Cloud Proxy
- 在我的libs文件夹中包含JDBC Jar文件
- 创建了JDBC连接字符串
“ jdbc:MysqL:///?cloudsqlInstance =&socketFactory = com.google.cloud.sql.MysqL.socketFactory; user =&password =”;
-实现filetree(dir:'libs',包括:['* .jar'])
-implementation'com.google.cloud.sql:MysqL-socket-factory-connector-j-8:1.1.0'
这是堆栈跟踪:
W / System.err:java.sql.sqlNonTransientConnectionException:无法 连接到localhost:3306上的MysqL服务器。 W / System.err:请确保 您所在的机器/端口上正在运行一个MysqL服务器 尝试连接到该软件正在运行的机器 能够连接到该主机/端口(即没有防火墙)。也使 确保未使用--skip-networking启动服务器 旗。 在com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:110) 在com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:97) 在com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:89) 在com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:63) W / System.err:位于 com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:73) 在com.MysqL.cj.jdbc.ConnectionImpl。(ConnectionImpl.java:470) 在com.MysqL.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) W / System.err:位于 com.MysqL.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197) 在java.sql.DriverManager.getConnection(DriverManager.java:569) 在java.sql.DriverManager.getConnection(DriverManager.java:237) W / System.err:位于 com.dedase.dedaseconstruction.ui.login.LoginActivity $ GetPatientID.doInBackground(LoginActivity.java:150) 在com.dedase.dedaseconstruction.ui.login.LoginActivity $ GetPatientID.doInBackground(LoginActivity.java:136) 在android.os.AsyncTask $ 2.call(AsyncTask.java:333) 在java.util.concurrent.FutureTask.run(FutureTask.java:266) 在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:245) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:636) W / System.err:位于java.lang.Thread.run(Thread.java:764) 引起原因:java.lang.NullPointerException:尝试调用虚拟方法'com.MysqL.cj.protocol.socketConnection com.MysqL.cj.protocol.a.NativeProtocol.getSocketConnection()' 空对象引用 在com.MysqL.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:980) 在com.MysqL.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826) W / System.err:位于 com.MysqL.cj.jdbc.ConnectionImpl。(ConnectionImpl.java:456) ...另外12位I / Choreographer:跳过了58帧!该应用程序可能在其主线程上做太多工作。 I /合子:执行完整代码 缓存收集,代码= 123KB,数据= 111KB 收集代码缓存后,代码= 117KB,数据= 78KB
解决方法
此行localhost:3,306.
看起来非常可疑。您确定某个地方没有错字吗?
您可能遇到过这个repo,但它不是很准确。我没有手头的Java客户端来测试它,但是我确实将Cloud SQL与其他堆栈一起使用,使用Proxy的要点是您的应用程序通过它连接到DB,就像数据库本身在本地运行一样。您的连接字符串除了凭据和localhost:3306
之外不应有其他任何内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。