Android Studio连接MySQL数据库超时解决办法(真机调试)

本文介绍了在Android Studio中遇到连接MySQL数据库超时问题的解决步骤,包括检查MySQL远程连接权限、AndroidManifest.xml文件设置、确保设备与电脑在同一网络,并提供了关键代码示例。尝试了如添加URL参数、关闭防火墙、修改MySQL配置等常见方法无效后,最终通过开启MySQL远程访问权限和调整Android应用权限设置成功解决问题。
摘要由CSDN通过智能技术生成

Android Studio连接MySQL数据库超时解决办法(真机调试)

此篇文章建立在自己懂得连接数据库需要引入jar包等一系列操作后,连接数据库的代码也懂得怎么写(比如ip为自己电脑ip,端口、数据库名、用户名、密码等根据自己实际情况更改),仅仅适于当连接数据库的代码找不到毛病,但又连不上的情况。
又或者说,在Android studio内部虚拟机调试时,可以正常连接数据库,可是真机调试死活连不上的情况。

完整报错如下:

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

连接数据库核心代码如下:

Connection cn=DriverManager.getConnection(“jdbc:mysql://192.168.X.XXX:3306/financing”,“root”,“root”)

我遇到这个问题时,网上也搜了很多,比较多的说法有:

  1. 将url末尾添加?autoReconnect=true&useSSL=false&…,不好使
  2. 关闭网络防火墙,不好使
  3. 更改MySQL配置文件my.ini,添加wait_timeout=604800 interactive_timeout=31536000两行代码,重启MySQL服务,不好使
  4. AndroidManifest.xml文件设置允许网络连接,即添加以下代码:
    <uses-permission android:name="android.permission.INTERNET" />,重要但不够
  5. 等等不一一列举了,若你在进行了如此多的操作还不能连接的话,别放弃,请往下看(请确保你的MySQL服务是打开的)

以上是我踩得坑,搞了很久,很迷惑,到底哪里出了问题呢?

重要
一、MySQL默认不允许远程连接,需自己手动更改权限

  1. 进入数据库mysql -u root -p
  2. use mysql;
  3. grant all privileges on *.* to '你的数据库用户名'@'%' identified by '你的密码' with grant option;%表示允许任何ip
  4. flush privileges;
  5. 可以使用以下语句验证远程连接:
    mysql -u用户名 -p密码 -h 192.168.XXX.XXX,注意u和p后面没有空格。

二、AndroidManifest.xml文件添加以下四行代码

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

将上述重要的两步检查完后,检查自己手机与电脑是否连接的同一网络,不同网络也不能连接数据库。(比如电脑连接的wifi,手机使用流量),再重新运行代码测试是否可以连接。本人做到这一步就可以了,xml新增四行代码的详情在此不做深究,本人不搞安卓,帮别人调试时出现的问题。耗费了我大量的精力解决,不记录一下对不起自己。

若看到此时的你还无法连接,请反复检查url、数据库名、用户名、密码等是否正确,MySQL服务是否启动,MySQL是否允许远程连接,xml文件是否更改。确保没问题后再尝试网络上的其他办法,比如关闭网络防火墙,更改build.gradle文件等。若还不行,请尝试打开自己电脑的移动热点,手机连接自己电脑的移动热点。
在这里插入图片描述
若还还还不行,请断开真机0.0,用虚拟机调试一下试试。(若更改配置文件记得重启服务生效)

            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Class.forName("com.mysql.jdbc.Driver");
                        System.out.println("1连接数据库ing");
                        Connection cn= DriverManager.getConnection("jdbc:mysql://192.168.X.XXX:3306/financing","root","root");
                        System.out.println("2连接数据库ing");
                        String sql="select username from user";
                        Statement st=(Statement)cn.createStatement();
                        ResultSet rs=st.executeQuery(sql);
                        System.out.println("3连接数据库ing");
                        cn.close();
                        st.close();
                        rs.close();

                        System.out.println("连接数据库成功");
                    } catch (ClassNotFoundException e) {
                        System.out.println("连接数据库失败");
                        e.printStackTrace();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }).start();

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值