Android Studio连接MySQL8.0

【序言】

        移动平台这个课程要做一个app的课设,我打算后期增加功能改成毕设,就想要使用MySQL来作为数据库,相对于SQLlite来说,我更熟悉MySQL一点。

【遇到的问题】

        一直无法连接上数据库,开始的时候查了很多资料,说是MySQL8.0版本比较高,密码验证插件是caching_sha2_password,Android Studio中的JDBC驱动可能不支持这种加密方式。(但我并不确定是否是这个原因,就是一直连不上)

我最开始用的是下面的代码(连接数据库):

    private static final String  TAG="DBUtils";//    用于日志打印
    private static Connection conn=null;//    定义连接变量conn
    //数据库连接函数
    public static Connection getConnection(String dbname) {//定义connection类函数,需要返回一个connection对象,即在上面定义的conn

        String ip = "192.168.0.146";//ip地址,win+R,输入cmd打开控制台,输入ipconfig /all查看本机ipv4地址,最上面那个
        int port = 3306;//MySQL安装时的默认端口号,无需更改
        String user = "root";//打开Navicat,点击用户,如果显示root@localhost,请修改为root@%或新加一个root@%,%表示任意,任意ip地址都可以连接
        String password = "123456";//密码
        String url = "jdbc:mysql://172.19.221.130:3306/course_design?useUnicode=true&characterEncoding=UTF-8&useSSL=true";
//        "?useUnicode=true&characterEncoding=UTF-8"添加中文信息时不会乱码
//       注册JDBC驱动的固定语句
        try {
            Class.forName("com.mysql.jdbc.Driver");//这是一个目录,你可以找到这个目录点进去就懂了
            Log.d(TAG, "加载JDBC驱动成功");
        } catch (ClassNotFoundException e) {
            Log.d(TAG, "加载JDBC驱动失败");
        }
//        创建与mysql的连接对象conn,当然你也可以直接把上面定义的那些变量url的值直接写进去,就不用上面写一堆定义
        try {
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("数据库连接成功");
            Log.d(TAG, "数据库连接成功");

        } catch (SQLException e) {
            Log.d(TAG, "数据库连接失败");
        }
        return  conn;//connection类,返回一个connection连接对象
    }

但是一直都是打印“数据库连接失败”。原博主的方法他自己是成功的,可能是我哪一步出错了我没发现吧。参考链接:Android studio 连接MYQSL8.0_android studio下载适配mysql8-CSDN博客。最后我试了别的方法成功了。

【5.11补充】

重大发现,上面这个代码可以连接数据库!!!不过也是要开新线程,在调用函数的时候调用就可以连接了!如图:

【我的解决方法】

1、开启远程访问3306端口

步骤1:依次点击控制面板—系统和安全—windows防火墙—高级设置-入站规则

步骤2:如图

步骤3:如图。填好端口号3306后,一直点击下一步即可。

2.进入MySQL页面

步骤1:Win+R,输入cmd,进入命令行窗口,输入mysql -u root -p后回车,再输入你的数据库密码

步骤2:

输入命令并回车:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION

该命令表示允许从所有IP进行连接,其中123456为数据库密码

3.需要新开一个线程运行,才能连接MySQL数据库

代码如下:

public void initConnect(String table) {
        // 必须新开线程才能连接MySQL数据库
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 数据库驱动
                String CLS="com.mysql.jdbc.Driver";
                String URL="jdbc:mysql://172.19.221.130:3306/course_design?serverTimezone = GMT&characterEncoding=UTF-8";
                String USER="root";
                String PWD="123456";
                try {
                    Class.forName(CLS).newInstance();// 加载数据库驱动
                    Connection conn=(Connection) DriverManager.getConnection(URL,USER,PWD);// 连接数据库
                    String sql="select * from "+table;
                    Statement stmt=conn.createStatement();
                    ResultSet rs=stmt.executeQuery(sql);// 执行sql
                    List<User> users = new ArrayList<>();
                    while (rs.next()) {
                        User user = new User(rs.getInt("id"),rs.getString("username"),rs.getString("password"));
                        user.setId(rs.getInt("id"));
                        user.setName(rs.getString("username"));
                        user.setPassword(rs.getString("password"));
                        users.add(user);
                        System.out.println(users);
                    }
                    System.out.println("连接成功");
                } catch (ClassNotFoundException | SQLException | IllegalAccessException | InstantiationException e) {
                    System.out.println("连接失败");
                    e.printStackTrace();
                }
            }
        }).start();
    }

顺带说一下导入jar包和添加权限

4、导入jar包

步骤1:到官网下载:MySQL :: Download MySQL Connector/J (Archived Versions)

我这里用的版本是5.1.49,建议用5.几的版本,版本高的似乎会出错

步骤2:下载后找到对应版本的jar包,复制粘贴到libs的文件夹下(没有libs就建一个)

步骤3:选中libs目录下的jar包,右击鼠标,点击最下面的Add as Library即可。这样系统就会自动在app目录下的build.gradle中帮你添加依赖。(如图)

注意:如果你的jar包用不了重新导入了别的版本,记得到build.gradle中将上一个版本的jar包删掉,不然会因为系统找不到该文件而报错

5、在AndroidManifest.xml中添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

然后就可以连接MySQL啦!

相关推荐

  1. MySQL商城数据表(80-88

    2024-05-11 21:00:06       11 阅读
  2. MySQL商城数据表(80-84

    2024-05-11 21:00:06       9 阅读
  3. AndroidStudio

    2024-05-11 21:00:06       41 阅读
  4. MySQLMySQL内外连接

    2024-05-11 21:00:06       22 阅读
  5. Mysql:交叉连接、内连接

    2024-05-11 21:00:06       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-11 21:00:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-11 21:00:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-11 21:00:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-11 21:00:06       18 阅读

热门阅读

  1. python删除一个文件夹所有文件

    2024-05-11 21:00:06       7 阅读
  2. Linux部署安装

    2024-05-11 21:00:06       6 阅读
  3. 在Ubuntu上安装并配置SWAP虚拟内存的完整教程

    2024-05-11 21:00:06       10 阅读
  4. ASP.NET Core SignalR 配置与集成测试究极指南

    2024-05-11 21:00:06       11 阅读
  5. 解决FS4054低耐压批量时不良容易烧,FS4054H高耐压

    2024-05-11 21:00:06       10 阅读
  6. Linux专题-Makefile(2)

    2024-05-11 21:00:06       11 阅读
  7. SpringSecurity安全管理框架-(一)初识SpringSecurity

    2024-05-11 21:00:06       9 阅读