Android/安卓 直连MySQL 使用JDBC连接MYSQL
下载安装MySQL
注意需要下载5.x版本,8.x版本jdbc驱动连接有问题 官网
下载后解压文件,使用管理员身份打开cmd,进入bin目录 输入 mysqld install
安装MySQL。
安装成功会提示Service successfully installed.
安装失败原因1
安装时提示由于找不到MSVCP120.dll,无法继续执行代码...
这种错误是由于未安装 vcredist 引起的
下载 vcredist 地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
安装刚才下载的那个软件,位置默认即可,安装成功
然后重新进行安装,成功解决这个问题!
配置环境变量
新建环境变量目录指定为MySQL安装目录,然后将%MYSQL_HOME%\bin;
添加到Path变量中
初始化MySQL
继续在cmd下初始化操作, 输入mysqld --initialize --console
输出结果如下 红线部分是初始化的用户密码 复制先保存一下密码
修改密码
首先启动MySQL服务,输入命令net start mysql
使用mysql -u root -p
粘贴上面生成的密码进入mysql
修改密码命令
ALTER USER USER() IDENTIFIED BY '新密码';
允许远程访问
管理员root的host是localhost,代表仅限localhost登录访问。
如果要允许开放其他ip登录,则需要添加新的host。如果要允许所有ip访问,可以直接修改成“%”
依次输入下面三行命令
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
Android项目添加依赖
implementation 'mysql:mysql-connector-java:5.1.1'
在AndroidManifast中添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
创建连接类
public class DBUtil {
//url 127.0.0.1改为数据库所在的电脑或服务器ip地址 pps改为自己数据库的名字
private static String url = "jdbc:mysql://127.0.0.1:3306/pps?autoReconnect=true&characterEncoding=utf8";
//数据库用户名
private static String user = "";
//数据库密码
private static String password = "";
//驱动程序类
private static String driverClass = "com.mysql.jdbc.Driver";
static {
try {
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接方法
*/
public static Connection getConnection() {
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 释放资源的方法
*/
public static void close(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
/**
* 释放资源的方法
*/
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
操作数据库增删改查
部分代码 使用AsyncTask异步操作数据库
public class LoginTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... strings) {
try {
Connection connection = DBUtil.getConnection();
Statement statement = connection.createStatement();
// select * from user where email = %s and password = %s;
String sql = String.format("select * from user where email = '%s' and password = '%s';", strings[0], strings[1]);
Log.d("LoginTask", "doInBackground :" + sql);
ResultSet resultSet = statement.executeQuery(sql);
String name = "";
while (resultSet.next()) {
name = resultSet.getString("name");
/* String email = resultSet.getString("email");
String password = resultSet.getString("password");*/
}
DBUtil.close(statement, connection);
return name;
} catch (SQLException e) {
e.printStackTrace();
}
return "";
}
@Override
protected void onPostExecute(String name) {
super.onPostExecute(name);
//回到主线程 更新UI
}
}
连接失败处理
手机端
检查权限是否配置
电脑端检查端口
控制面板 -> 系统和安全 -> Windows Defender 防火墙 -> 高级设置 -> 入站规则 -> 新建规则 -> 规则类型选择端口 -> 添加端口3306