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对象,即在上面定义的connString 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() {@Overridepublic 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);// 执行sqlList<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啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/690324.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】/*操作符(上)*/

目录 一、算数操作符&#xff1a;、-、*、/、% 1.1 和 - 1.2 * 1.3 / 1.4 % 二、赋值操作符&#xff1a; 和符合赋值 2.1 连续赋值 2.2 复合赋值(自操作) 三、单目操作符&#xff1a;、--、(正号)、-(负号) 3.1 和 -- 3.1.1 前置 3.1.2 后置 3.1.3 前置-- …

【RAG 论文】Contriever:对比学习来无监督训练文本嵌入模型

论文&#xff1a;Unsupervised Dense Information Retrieval with Contrastive Learning ⭐⭐⭐⭐⭐ Facebook Research, arXiv:2112.09118 Code&#xff1a;github.com/facebookresearch/contriever 一、论文速读 本文使用对比学习的方法来对文本检索模型做无监督学习训练&am…

数据结构(一)绪论

2024年5月11日 一稿 数据元素数据项 逻辑结构 集合 线性结构 树形结构 图结构 物理结构 数据运算 算法 时间复杂度

【贪心算法】哈夫曼编码Python实现

文章目录 [toc]哈夫曼编码不同编码方式对比前缀码构造哈夫曼编码哈夫曼算法的正确性贪心选择性质证明 最优子结构性质证明 总结 Python实现时间复杂性 哈夫曼编码 哈夫曼编码是广泛用于数据文件压缩的十分有效的编码方法&#xff0c;其压缩率通常为 20 % 20\% 20%到 90 % 90\%…

Cloud Translation 价格

Cloud Translation 价格 您需要按月为 Cloud Translation 处理的内容量付费。您需要支付的具体费用取决于您使用的 API 方法和翻译模型。所列价格以美元 (USD) 为单位。 如果您使用非美元货币付费&#xff0c;请参阅 Cloud Platform SKU 上以您的币种列出的价格。 如需详细了解…

机器学习算法应用——CART决策树

CART决策树&#xff08;4-2&#xff09; CART&#xff08;Classification and Regression Trees&#xff09;决策树是一种常用的机器学习算法&#xff0c;它既可以用于分类问题&#xff0c;也可以用于回归问题。CART决策树的主要原理是通过递归地将数据集划分为两个子集来构建决…

怎么制作流程图?介绍制作方法

怎么制作流程图&#xff1f;在日常生活和工作中&#xff0c;流程图已经成为我们不可或缺的工具。无论是项目规划、流程优化&#xff0c;还是学习理解复杂系统&#xff0c;流程图都能帮助我们更直观地理解和表达信息。然而&#xff0c;很多人可能并不清楚&#xff0c;其实制作流…

12、FreeRTOS信号量(semaphore)

文章目录 一、信号量的特性1.1 使用场景1.2 什么是信号量1.3 信号量和队列的区别1.4 两种信号量的对比 二、二值信号量/计数信号量2.1 什么是二值信号量2.2 什么是计数信号量2.2 (二值信号量/计数信号量) 相关API 三、互斥量(mutex)3.2 什么是优先级翻转3.3 互斥量的使用场合3.…

互斥锁概述

1. 同步互斥概述 在多任务操作系统中&#xff0c;同时运行的多个任务可能都需要访问/使用同一种资源多个任务之间有依赖关系&#xff0c;某个任务的运行依赖于另一个任务同步和互斥就是用于解决这两个问题的。 互斥&#xff1a;一个公共资源同一时刻只能被一个进程或线程使用…

谷粒商城实战(023 业务-订单模块-页面和幂等性等校验)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第270p-第p283的内容 简介 远程调用的服务已经注册到了注册中心 校验 幂等性校验 拿令牌 读令牌 删令牌 要实现 原子性 在一个事务中 添加令牌…

使用注解的方式进行配置RabbitMQ

引入依赖&#xff1a; <dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit-test</artifactId><scope>test</scope></dependency> 配置application.yml server:port: 8082 spring:rabbitmq…

堆排序 之实现最小的K个数

目录 1、方式一&#xff1a;通过自定义实现建堆和堆化操作 2、方式二&#xff1a;借助模块heapq实现 2.1、模块heapq的基本使用 2.2、使用heapq实现最小的k个数 3、堆在实际项目的应用 实现语言&#xff1a;Python 3.9 题目来源&#xff1a;牛客 分析&#xff1a; 要找…