Loading

Android/安卓 直连MySQL 使用JDBC连接MYSQL

下载安装MySQL

注意需要下载5.x版本,8.x版本jdbc驱动连接有问题 官网
下载5.x版本
下载后解压文件,使用管理员身份打开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

posted @ 2020-07-20 16:48  Airmour  阅读(600)  评论(0编辑  收藏  举报