#android #android-studio #google-compute-engine #google-cloud-sql #google-cloud-proxy
#Android #android-studio #google-compute-engine #google-cloud-sql #google-cloud-proxy
Вопрос:
Я не могу подключиться к своей базе данных через Compute Engine.
То, что я сделал до сих пор:
- Настройка моего вычислительного движка
- Подключите мой вычислительный движок к моему облачному SQL
- Установите и запустите Cloud Proxy на моем Compute Engine
- Включен файл Jar JDBC в мою папку libs
- Создана строка подключения JDBC
«jdbc: mysql:///?cloudSqlInstance=amp;SocketFactory=com.google.cloud.sql.mysql.SocketFactory; user=amp;password=»;
- Добавлена зависимость от моего файла Gradle
-реализация FileTree(dir: ‘libs’, включает в себя: [‘*.jar’])
-реализация ‘com.google.cloud.sql: mysql-socket-factory-connector-j-8: 1.1.0’
Вот трассировка стека:
W / System.err: java.sql.SQLNonTransientConnectionException: не удается подключиться к серверу MySQL на локальном хосте: 3,306. 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)..java: 237) с системой.ошибка: в 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.вызов (AsyncTask.java:333) в java.util.concurrent.FutureTask.run(FutureTask.java: 266) в android.os.AsyncTask$SerialExecutor$ 1.запустите(AsyncTask.java:245) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1162) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) с 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 Я / Хореограф: пропущено 58 кадров! Возможно, приложение выполняет слишком много работы в своем основном потоке. Ввод / вывод: выполнить полный сбор кэша кода, код = 123 КБ, данные = 111 КБ После сбора кэша кода, код = 117 КБ, данные = 78 КБ
Комментарии:
1. Вы можете следовать этому документу , который также включает в себя руководство о том, как подключить клиент MYSQL из Compute Engine. Я бы посоветовал вам попробовать подключить клиент MYSQL без JDBC, чтобы вы могли изолировать проблему. Вот еще один учебник Cloud SQL Connector для Java.
Ответ №1:
Эта строка localhost:3,306.
выглядит действительно подозрительно. Вы уверены, что у вас где-нибудь нет опечатки?
Вероятно, вы сталкивались с этим репозиторием, и он не очень точен. У меня нет Java-клиента для его тестирования, но я использую Cloud SQL с другим стеком, и смысл использования прокси заключается в том, что ваше приложение подключается к БД через него, как если бы сама БД работала локально. В вашей строке подключения не должно быть ничего, кроме creds и localhost:3306
.