Android学习 ① Android连接不上Mysql数据库的多种原因以及解决方式

本文详细介绍了在Android应用中连接远程MySQL数据库时可能遇到的问题及解决方案,包括使用IP地址而非localhost,配置AndroidManifest.xml的互联网权限,设置MySQL允许远程访问,以及处理可能出现的MySQL jar包不兼容问题。同时提供了使用新线程进行数据库连接的示例代码,确保连接过程的正确执行。
摘要由CSDN通过智能技术生成

① 连接数据库的时候不能使用localhost,必须使用当前IP地址

String URL="jdbc:mysql://192.168.1.108:3306/db1?serverTimezone = GMT&characterEncoding=UTF-8";

IP地址可通过WIN键+R,输入CMD,在黑框中输入ipconfig指令获得IPV4地址

② 用IP地址连接的时候需要注意,通过IP地址连接MySql数据库需要处理两点,Android加入访问权限和MYSQL允许用户远程访问

一、在AndroidManifest.xml中加入相关的权限

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

二、mysql数据库需要能允许远程用户访问

允许root使用rootpassword从任何主机连接到MySQL服务器,root为用户名,rootpassword为用户密码

Mysql数据库开启远程连接 - 赵广陆 - 博客园

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

FLUSH PRIVILEGES;

可以通过navicat测试连接,如果成功,则代表能够远程访问。 

 ③ Mysql Jar包问题导致

如果上述两种都没问题,关闭防火墙之后,依然不能正常连接,就需要注意MySQL的jar包问题。

我的问题解决方式就是更换JAR包版本来解决的,建议把JAR包换成5.1.49版本就能正常连接数据库。

mysql-connector-java-5.1.49 百度网盘下载地址分享_嘉 诚的博客-CSDN博客_mysql-connector-java-5.1.48

我的MYSQL是8.0版本,如果用同样是8.0版本的jar包,就会报错:java.lang.NoClassDefFoundError Failed resolution of LjavasqlSQLType

④ 必须新开一个线程处理MySQL的连接过程,给出整体的能运行的代码

注意,连接MySQL数据库,需要新开一个线程运行,不然也会出错。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 连接数据库
        initLogin();
    }


    private void initLogin() {
        // 必须新开线程才能连接MySQL数据库
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 数据库驱动
                String CLS="com.mysql.jdbc.Driver";
                //这里的ip地址要改为自己的,db1为自己的数据库名字
                String URL="jdbc:mysql://192.168.1.108:3306/db1?serverTimezone = GMT&characterEncoding=UTF-8";
                String USER="root";
                //这里输入自己的数据库密码
                String PWD="";
                // 用test做一个简单的测试
                String test="";
                try {
                    // 加载数据库驱动
                    Class.forName(CLS).newInstance();
                    // 连接数据库
                    Connection conn=(Connection) DriverManager.getConnection(URL,USER,PWD);
                    // sql 语句:从video表中获取全部数据
                    String sql="select * from video";
                    Statement stmt=conn.createStatement();
                    // 执行sql
                    ResultSet rs=stmt.executeQuery(sql);
                    // 循环读取
                    while (rs.next()){
                        // 读取videoTitle字段,记载在test中
                        test+=rs.getString("VideoTitle");
                        // 打印test
                        Log.v("debug",test);
                    }
                } catch (ClassNotFoundException | SQLException | IllegalAccessException | InstantiationException e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

}

  • 13
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值