前言
Android Studio连接MySQL数据库时一直报错:“Communications link failure”
后来发现是IP地址问题
原代码
package com.example.novelinspiration;
import android.util.Log;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Connection {
private static final String TAG = "mysql_nr";
java.sql.Connection conn = null;
public static void mymysql(){
new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted()){
try {
Thread.sleep(100); //每隔0.1秒尝试连接
}catch (InterruptedException e){
Log.e(TAG, e.toString());
}
//1、加载JDBC驱动
try{
Class.forName("com.mysql.jdbc.Driver");
Log.v(TAG, "加载JDBC驱动成功");
}catch (ClassNotFoundException e){
Log.e(TAG, "加载JDBC驱动失败");
return;
}
//2、设置好IP/端口/数据库名/用户名/密码等必要的连接信息
//3、连接JDBC
try{
java.sql.Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/nr?useSSL=false&serverTimezone=UTC", "root", "********");
Log.d(TAG, "数据库连接成功");
conn.close();
return;
}catch (SQLException e){
Log.e(TAG, e.getMessage());
}
}
}
}).start();
}
}
结果:报错“Communications link failure”
发现问题
查了之后,发现是因为Android Studio连接MySQL数据库不能使用localhost(127.0.0.1),要使用本机地址
第一次修改
使用cmd ipconfig命令查到了我的本机地址是172.16.3.69
于是修改为
java.sql.Connection conn = DriverManager.getConnection("jdbc:mysql://172.16.3.69:3306/nr?useSSL=false&serverTimezone=UTC", "root", "********");
结果:报错“"Host ‘LAPTOP-4TP8R1M2’ is not allowed to connect to this MySQL server”
发现问题
查了之后,发现是MySQL不允许远程连接问题,需要调整mysql允许远程连接的IP地址
第二次修改
打开cmd命令界面
输入以下命令:
mysql -u root - p (输入密码)
use mysql;
select host, user from user where user = 'root';
//查看用户root允许远程连接的host
update user set host='%' where user='root';
//将host设置为通配符%
flush privileges;
//host修改完成后执行flush privilegs使配置立即生效
结果:再次执行数据库连接成功、
现代码
package com.example.novelinspiration;
import android.util.Log;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Connection {
private static final String TAG = "mysql_nr";
java.sql.Connection conn = null;
public static void mymysql(){
new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted()){
try {
Thread.sleep(100); //每隔0.1秒尝试连接
}catch (InterruptedException e){
Log.e(TAG, e.toString());
}
//1、加载JDBC驱动
try{
Class.forName("com.mysql.jdbc.Driver");
Log.v(TAG, "加载JDBC驱动成功");
}catch (ClassNotFoundException e){
Log.e(TAG, "加载JDBC驱动失败");
return;
}
//2、设置好IP/端口/数据库名/用户名/密码等必要的连接信息
//3、连接JDBC
try{
java.sql.Connection conn = DriverManager.getConnection("jdbc:mysql://172.16.3.69:3306/nr?useSSL=false&serverTimezone=UTC", "root", "wjw20001020");
Log.d(TAG, "数据库连接成功");
conn.close();
return;
}catch (SQLException e){
Log.e(TAG, e.getMessage());
}
}
}
}).start();
}
}
注:这是我解决这个问题的全过程,仅供参考,谢谢