#java #android #mysql #kotlin
#java #Android #mysql #kotlin
Вопрос:
Я перепробовал все методы и способы из стека и видео, и ни один из них на самом деле не работал до сих пор.
ОСНОВНОЙ КЛАСС АКТИВНОСТИ
package com.example.androidmysql;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
TextView text;
Button show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.textView);
show = (Button) findViewById(R.id.button);
show.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/example","root","test");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM user");
String records ="";
while (resultSet.next()) {
records = resultSet.getString(1) " " resultSet.getString(2) "n";
}
text.setText(records);
}
catch (Exception e) {
e.printStackTrace();
text.setText(e.toString());
}
}
});
}
}
Основная проблема заключается в том, что JDBC не может подключиться к базе данных
ВЫВОД
W/System.err: java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
W/System.err: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1009)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at com.example.androidmysql.MainActivity$1.onClick(MainActivity.java:47)
at android.view.View.performClick(View.java:7448)
W/System.err: at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
- Я использую последнюю версию mysql-connector-8.0.22.
- Добавлены разрешения на доступ к Интернету в манифесте
- Установлен сервер mysql 8.0.22
- Я также изменил конфигурацию C:ProgramDataMySQLMySQL Сервер 8.0my.ini => bind-address=0.0.0.0
- Проверено на разных JDK: 15, 1.8
Вот код, который я загрузил на github. Может ли кто-нибудь протестировать его на своем ПК с помощью своей базы данных example? https://github.com/simplybychris/DatabaseClientApp/tree/master
Пользователь базы данных и пароль хороши, потому что я протестировал его в отдельном классе без основного действия и вне Java project, и он работает… Похоже, это не будет работать в мобильных классах
Спасибо за любые советы
Комментарии:
1. Не подключайте приложение напрямую к базе данных mysql. Вам нужно серверное приложение для абстракции
2. Причина, по которой вы не подключаетесь напрямую, заключается в том, что вам нужно ввести пароль к своей базе данных в своем приложении, что является действительно плохой идеей — его затем тривиально взломали. Используйте веб-сервис между ними.
3. Кстати, вы пытаетесь подключить базу данных на вашем смартфоне (localhost), где не установлена база данных mysql
4. Но я хотел бы создать клиентское приложение для базы данных, в котором я мог бы указать URL, пользователя и пароль для входа в базу данных, поэтому нет смысла создавать для него API веб-службы. Или это?
5. @Jens Я хочу создать приложение, в которое вы можете поместить свои данные для входа в базу данных и просмотреть свою базу данных. Что-то вроде клиента базы данных
Ответ №1:
Я не знаю, почему люди игнорируют вопрос, если нет правильного ответа. В любом случае, после 2 дней поиска я, наконец, нашел решение. Проблема возникает при подключении к mysql с последней версией драйвера 8.0. Я предлагаю изменить его на mysql 5.7.