Android Studio连接MYSQL数据库

首先导入mysql的jar包,这里连接的是8版本的。

这里之前到如果mysql的jar包了

首先跳到Project模式:

直接复制粘贴到这里:

这里之前到如果了。想删掉重新导入一次,但是报错,什么ioexception。这里将Project Structure中的Moudle中的app中的引入的该jar包的依赖删除掉,然后重启as,再删除就可以了。好吧,这也不是重点。

好,这里重新导入一边,复制jar包,粘贴到libs

点击ok后:

这里还没有引入依赖,接下来引入依赖。

有两种方法:

(1)右键jar包

点击这个。之后出现:

点击ok,就可以直接在app的build.gradle中创建dependency。

(2)这个比较麻烦

首先进入project structure

快捷键ctrl+alt+shift+s.进入这个界面:

依次点击:

点击第二个jar dependency

出现这个界面:

输入如下路径,这里是相对app文件夹的相对路径:

添加进来了:点击ok

前面 出现‘>' ,引入成功。

app的build.gradle中也会自动引入依赖。

到这里mysql的jar包就导入完成了。、

之后再程序中可以通过:

Class.forName("com.mysql.cj.jdbc.Driver");

来引入。

接下来就可以建立数据库连接了。

这里写了一个工具类,将连接mysql的过程封装起来,直接再main函数中调用即可。这里main函数好像可以不new对象就调用对象中的static方法。

用到的就这两个,其中connection是工具类,main调用工具类。

connection的代码如下:

package com.example.myapplication;import android.util.Log;import java.sql.DriverManager;
import java.sql.SQLException;public class Connection {public static void mymysql(){final Thread thread =new Thread(new Runnable() {@Overridepublic void run() {while (!Thread.interrupted()) {try {Thread.sleep(100);  // 每隔0.1秒尝试连接} catch (InterruptedException e) {
//                        Log.e(TAG, e.toString());System.out.println(e.toString());}// 1.加载JDBC驱动try {Class.forName("com.mysql.cj.jdbc.Driver");
//                        Log.v(TAG, "加载JDBC驱动成功");System.out.println("加载JDBC驱动成功");} catch (ClassNotFoundException e) {
//                        Log.e(TAG, "加载JDBC驱动失败");System.out.println("加载JDBC驱动失败");return;}// 2.设置好IP/端口/数据库名/用户名/密码等必要的连接信息String ip = "";int port = 3306;String dbName = "";String url = "jdbc:mysql://" + ip + ":" + port+ "/" + dbName+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";//                    useUnicode=true&characterEncodeing=UTF-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true"// 构建连接mysql的字符串String user = "root";String password = "WQT200126";// 3.连接JDBCtry {System.out.println("111");java.sql.Connection conn = DriverManager.getConnection(url, user, password);
//                        Log.d(TAG, "数据库连接成功");System.out.println("数据库连接成功");conn.close();return;}catch (SQLException e) {
//                        Log.e(TAG, e.getMessage());System.out.println('H'+e.getMessage());}}}});thread.start();}
}

其中数据库配置的代码是这些:

​
String ip = "";int port = 3306;String dbName = "";String url = "jdbc:mysql://" + ip + ":" + port+ "/" + dbName+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";//                    useUnicode=true&characterEncodeing=UTF-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true"​

其中,dbname就是连接的数据库名称,如果是连接本机,ip地址就是127.0.0.1。

还需要加上用户名和密码:

​
String user = "root";String password = "";​

设置好后就通过:

java.sql.Connection conn = DriverManager.getConnection(url, user, password);

来连接。

这里as中好像不允许耗时程序再主线程中,意思是连接MYSQL是个耗时程序,所以需要另外开辟一个线程来连接MYSQL。所以这里new了一个Thread。

然后工具类写好了,接下来再main函数中引入。

main函数代码如下:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;//import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import com.example.myapplication.Connection;public class Main {public static void main(String[] args) {System.out.println("eh");Connection.mysql1();}
}

接下来运行main函数。再运行前,要调整这里:

然后运行:

运行结果:

HThe server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
加载JDBC驱动成功
111
HThe server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
加载JDBC驱动成功
111
HThe server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
加载JDBC驱动成功
111

就一直打印这几句话。

这里的“数据库连接成功"没有打印。

仔细看有这句话:

HThe server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

好像要加什么时间域。

改了url

原来的url是:

String url = "jdbc:mysql://" + ip + ":" + port+ "/" + dbName+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";

改为:


String url = "jdbc:mysql://" + ip + ":" + port+ "/" + dbName+"? useUnicode=true&characterEncodeing=UTF-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true";​

再连接:

成功了。

这里尝试一下不用开辟线程的方法,因为这里没有在app上运行:

代码:

工具类中加入:

​
public static void mysql1(){String success = "111";System.out.println(success);
//        while (this.success_con!="111") {while (success=="111"){// 1.加载JDBC驱动try {Class.forName("com.mysql.cj.jdbc.Driver");
//                        Log.v(TAG, "加载JDBC驱动成功");System.out.println("加载JDBC驱动成功");} catch (ClassNotFoundException e) {
//                        Log.e(TAG, "加载JDBC驱动失败");System.out.println("加载JDBC驱动失败");return;}// 2.设置好IP/端口/数据库名/用户名/密码等必要的连接信息String ip = "127.0.0.1";int port = 3306;String dbName = "mm";String url = "jdbc:mysql://" + ip + ":" + port+ "/" + dbName+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";//                    useUnicode=true&characterEncodeing=UTF-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true"// 构建连接mysql的字符串String user = "root";String password = "WQT200126";// 3.连接JDBCtry {System.out.println("111");java.sql.Connection conn = DriverManager.getConnection(url, user, password);
//                        Log.d(TAG, "数据库连接成功");System.out.println("数据库连接成功");success = "sss";conn.close();return;}catch (SQLException e) {
//                        Log.e(TAG, e.getMessage());System.out.println('H'+e.getMessage());}}}​

main函数中:

public class Main {public static void main(String[] args) {System.out.println("eh");Connection.mysql1();
//        this.test();
//        Main main = new Main();
//        main.test();}
}

结果:

也可以连接。

接下来试一下在app中运行。

这里需要注意的是,在app中运行要开辟线程。不在app中运行,也就是不在oncreate,onclick中打印信息,不能用Log()。

之前的代码中,我都是将log注释掉了,用的sout。

首先在main函数中添加oncreate方法。

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Connection.mymysql1();}

需要注意的是:

运行前要sync:同步一下。

同步完成:

点击这个运行:

运行会报错:

Cannot fit requested classes in a single dex file (# methods: 81010 > 65536)

好像是容量超过限制。

参考这篇:解决“Cannot fit requested classes in a single dex file”的问题-CSDN博客

然后SYNC,BUILD,RUN

成功。

然后尝试在手机上运行。

在main中加入代码:

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Connection.mymysql1();}

运行成功。

需要注意,这里mysql的jar包要换位5.*,不然在手机上运行会报错。

参考这篇:安卓连接云mysql时报错:java.lang.NoClassDefFoundError: Failed resolution of: Ljava/sql/SQLType-CSDN博客

同时更改

Class.forName("com.mysql.jdbc.Driver");

libs中之前的8.*的jar包要删掉,不然会报错。

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

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

相关文章

【算法Hot100系列】两数之和

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【动手学深度学习】(十二)现代卷积神经网络

文章目录 一、深度卷积神经网络AlexNet1.理论知识 一、深度卷积神经网络AlexNet 1.理论知识 ImageNet(2010) 图片自然物体的彩色图片手写数字的黑色图片大小468 * 38728*28样本数1.2M60K类数100010 AlexNet AlexNet赢了2012ImageNet竞赛更深更大的LeNet主要改进&#xff…

漏刻有时百度地图API实战开发(9)Echarts使用bmap.js实现轨迹动画效果

Bmap.js是Echarts和百度地图相结合开发的一款JavaScript API,它可以帮助用户在web应用中获取包括地图中心点、地图缩放级别、地图当前视野范围、地图上标注点等在内的地图信息,并且支持在地图上添加控件,提供包括智能路线规划、智能导航(驾车…

web,Apache简述

一.HTTP请求访问的完整过程 1.建立连接 2.接收请求 3.处理请求 4.访问资源 服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源 静态资源:不需要…

Redis 环境搭建2

文章目录 第2关:使用 Redis 第2关:使用 Redis 本文是接着上篇文章写的第二关代码,部分人再进入第二关时不会保留第一关的配置的环境,可以通过下面一句代码进行检验。 redis-cli -p 7001 -c如果进入到了redis界面就是有环境&…

【9】Spring Boot 3 集成组件 : 基于spring security的认证权限开发【认证】

目录 【9】Spring Boot 3 集成组件 : 基于spring security的用户权限系统【认证】认证和权限流程【理论】认证授权鉴权权限控制认证、授权、鉴权、和权限控制关系认证和鉴权的关系 认证流程【理论】1. 直接携带认证令牌访问资源2. Session认证机制3. Jwt认证机制下的…

python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接口测…

Unity 实现单例模式

目录 基本概念 饿汉模式(推荐) 懒汉模式: 基本概念 单例模式:类只有一个实例,一般使用static来实现单例模式; 比如:有一个Test类,实现了单例,假设这个唯一的实例名为SingTonle,实例在类内被实现并被stat…

【pycharm】Pycharm中进行Git版本控制

本篇文章主要记录一下自己在pycharm上使用git的操作,一个新项目如何使用git进行版本控制。 文章使用的pycharm版本PyCharm Community Edition 2017.2.4,远程仓库为https://gitee.com/ 1.配置Git(File>Settings) 2.去Gitee创建…

微服务——服务保护Sentinel

雪崩问题 在单体项目里面,如果某一个模块出问题会导致整个项目都有问题。 在微服务项目里面,单独一个服务出问题理论上是不会影响别的服务的。 但是如果有别的业务需要调用这一个模块的话还是会有问题。 问题产生原因和解决思路 最初那只是一个小小…

持续集成交付CICD:通过API方式上传Nexus制品

目录 一、实验 1.通过API方式上传Nexus制品 二、问题 1.如何通过API方式上传PNG图片 2.如何通过API方式上传tar.gz 与 ZIP文件 3.如何通过API方式上传Jar file文件 4.如何通过API方式上传制品(maven类型的制品)文件 5.如何下载制品 一、实验 1.通…

MySQL在Centos7环境安装

说明: • 安装与卸载中,⽤⼾全部切换成为root,⼀旦 安装,普通⽤⼾能使⽤的 1. 卸载不要的环境 [roothcss-ecs-1036 ~]# ps ajx |grep mariadb # 先检查是否有mariadb存在 13134 14844 14843 13134 pts/0 14843 S 1005 0:00 gr…