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博客。最后我试了别的方法成功了。

【我的解决方法】

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://xiahunao.cn/news/3031918.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【通义千问系列】Qwen-Agent 从入门到精通【持续更新中……】

目录 前言一、快速开始1-1、介绍1-2、安装1-3、开发你自己的Agent 二、Qwen-Agent的使用和开发过程2-1、Agent2-1-1、Agent使用2-1-2、Agent开发 2-2、Tool2-2-1、工具使用2-2-2、工具开发 2-3、LLM2-3-1、LLM使用2-3-2、LLM开发 三、基于Qwen-Agent的案例分析3-1、3-2、 总结 …

拥有蝴蝶效应的爬虫如何进行防护

美国气象学家爱德华罗伦兹&#xff08;Edward N.Lorenz&#xff09;1963年在一篇提交纽约科学院的论文中分析了一个叫做蝴蝶效应的理论&#xff1a;“一个气象学家提及&#xff0c;如果这个理论被证明正确&#xff0c;一只海鸥扇动翅膀足以永远改变天气变化。”在以后的演讲和论…

小程序开发平台源码系统 低成本助力中小企业建站 带完整的安装代码包以及搭建教程

在当今数字化时代&#xff0c;拥有一个功能齐全、界面美观的小程序对于中小企业来说至关重要。然而&#xff0c;高昂的开发成本和复杂的搭建流程往往成为制约中小企业建立小程序的瓶颈。小编给大家分享一款低成本、易用性强的小程序开发平台源码系统&#xff0c;旨在助力中小企…

Python-VBA函数之旅-sorted函数

目录 一、sorted函数的常见应用场景 二、sorted函数使用注意事项 三、如何用好sorted函数&#xff1f; 1、sorted函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://blog.csdn.net/ygb_1024?spm1…

Python计算器程序代码

from tkinter import * import random class App: def __init__(self, master): self.master master self.initwidgets() #表达式的值 self.expr None def initwidgets(self): #定义一个输入组件 self.show Label(relief SUNKEN, font (Courier New, 24), width 25, bg …

一个“彩光”的自白:入室10万间的变革路

从0到10W 锐捷以太彩光的每一步 2021年 以太全光奠基 锐捷网络创新性提出了以太全光路线的代表性方案——极简以太全光解决方案1.0,在采用光纤作为传播介质的基础上,将交换机直接下沉至房间内。这一举措不仅简化了布线,新增业务只需在房间内灵活扩展,即可完成终端入网,而且通…

Leetcode—946. 验证栈序列【中等】

2024每日刷题&#xff08;133&#xff09; Leetcode—946. 验证栈序列 实现代码 class Solution { public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {int left 0;for(int i 0; i < popped.size(); i) {while(left &…

数据结构(十三)----几种特殊的树

目录 一.二叉排序树 1.二叉排序树的查找 2.二叉排序树的插入 3.二叉排序树的构造 4.二叉树的删除 5.二叉排序树的查找效率 二.平衡二叉树 1.平衡二叉树的插入 2.平衡二叉树的查找效率 3.平衡二叉树的删除 三.红黑树 1.红黑树的概念 2.红黑树的查找 3.红黑树的插入…

QT学习(1)——创建第一个QT程序,信号和槽,打开关闭窗口的案例

目录 引出规范和帮助文档创建第一个Qt程序对象树概念信号signal槽slot自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式返回值mutable修饰案例 打开关闭窗口案例 总结 引出 QT学习&#xff08;1&#…

导出QQ好友列表、群列表、群员列表

MENU 准备工作在浏览器地址栏中输入地址使用F12快捷键打开开发者工具(浏览器控制台)点击头像登入网站(推荐)或手机扫码登录获取群列表获取好友列表获取群员列表 准备工作 一台带有浏览器的电脑 在浏览器地址栏中输入地址 https://qun.qq.com/member.html 使用F12快捷键打开开发…

一文搞懂反射,还有谁不懂,直接甩给他

Hi,大家好&#xff0c;我是抢老婆酸奶的小肥仔。 反射&#xff0c;在我们日常开发中无时无刻&#xff0c;被大量运用在框架代码和工具代码中&#xff0c;反射可以通俗点讲就是一个类的自我剖析&#xff0c;通过反射可以获取到这个类所有信息&#xff0c;包括&#xff1a;属性&…

美国政府发布新的国际网络空间和数字政策战略(上)

文章目录 前言一、战略内容介绍二、数字团结的含义三、如何建立数字团结前言 美国务院5月6日正式发布《美国国际网络空间和数字政策战略:迈向创新、安全和尊重权利的数字未来》,旨在指导国际社会参与技术外交并推动《美国国家安全战略》和《美国国家网络安全战略》。 美国务…

创新指南|将会话式AI聊天机器人纳入PLG增长战略

想象一个繁荣的数字城市广场&#xff0c;志同道合的人们在这里分享他们的激情、经验和知识。想象一个将房东与旅行者、顾客与司机、人们与他们喜爱的品牌无缝连接起来的平台。在这个世界里&#xff0c;用户交流促进增长&#xff0c;社区成为推动力。 如果您的应用程序天生不符…

视频编辑软件pitivi基本功之创建标题片段

视频编辑软件pitivi基本功之创建标题片段 台式机的系统是openSUSE-Leap-15.5-DVD-x86_64 一、素材来源 《视频编辑软件pitivi基本功之使用SSR录制电脑屏幕》 https://blog.csdn.net/weixin_42145772/article/details/138597608?spm1001.2014.3001.5502 根据上面文章的方法得…

考了PMP后,NPDP到底还有没有必要考?NPDP通关宝典来啦!

NPDP和PMP相比&#xff0c;两者的相同点都是由美国发起的&#xff0c;都是管理行业的证书。区别也很大&#xff0c;PMP是项目经理国际认证证书&#xff0c;NPDP是产品经理认证证书&#xff0c;不过PMP已经由外专局引入国内二十多年了&#xff0c;在市面上知名度更高&#xff0c…

【数据结构】第五讲:栈和队列

个人主页&#xff1a;深情秋刀鱼-CSDN博客 数据结构专栏&#xff1a;数据结构与算法 源码获取&#xff1a;数据结构: 上传我写的关于数据结构的代码 (gitee.com) 目录 一、栈 1.栈的定义 2.栈的实现 a.栈结构的定义 b.初始化 c.扩容 d.入栈 e.出栈 f.打印 g.取栈顶元素…

Java医院绩效管理应用系统源码java+ maven+ avue 公立医院绩效考核管理系统源码 支持二开

Java医院绩效管理应用系统源码java maven avue 公立医院绩效考核管理系统源码 支持二开 医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求&#xff0c;以“工作量为基础的考核方案”为核心思想&#xff0c;结合患者满意度、服务质量、技术难度、工作效率、医德医风…

Java入门基础学习笔记16——运算符

package cn.ensource.operator;public class OperatorDemo1 {public static void main(String[] args) {// 目标&#xff1a;掌握基本的算术运算符的使用int a 10;int b 2;System.out.println(a b);System.out.println(a - b);System.out.println(a * b); // 20System.out.…

Pandas DataFrame行迭代:初学者指南

在数据分析中&#xff0c;Pandas是一个强大的Python库&#xff0c;它提供了快速、灵活以及表达力强的数据结构&#xff0c;旨在使“关系”或“标签”数据的操作既简单又直观。对于初学者来说&#xff0c;理解如何迭代DataFrame的行是一项基础但重要的技能。本文将通过通俗易懂的…

一文讲透亚马逊云三层架构

关于三层架构&#xff0c;我们有很多想说的话&#xff1a; &#xff08;以下内容以下都在VPC中&#xff09; cloudfront做CDN加速网关规划S3做静态网站托管APIGateway作为统一网关入口认证/限流Lambda 作为传统后端&#xff0c;并发&#xff0c;底层架构Redis缓存DDB作为持久化…