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() {
            @Override
            public 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.连接JDBC
                    try {
                        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.连接JDBC
            try {
                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包要删掉,不然会报错。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】—— D. Divide and Equalize(Codeforces Round 903 (Div. 3))(数学、数论)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

【分治】最接近点对Python实现

文章目录 [toc]问题描述一维最接近点对算法Python实现 二维最接近点对算法分治算法时间复杂性Python实现 问题描述 给定平面上 n n n个点,找其中的一对点,使得在 n n n个点组成的所有点对中,该点对的距离最小 一维最接近点对算法 Python实…

探索无监督域自适应,释放语言模型的力量:基于检索增强的情境学习实现知识迁移...

深度学习自然语言处理 原创作者: Xnhyacinth 在自然语言处理(NLP)领域,如何有效地进行无监督域自适应(Unsupervised Domain Adaptation, UDA) 一直是研究的热点和挑战。无监督域自适应的目标是在目标域无标签的情况下,将源域的知识…

docker安装elasticsearch和kibana

docker系列 1、CentOS7安装docker 2、docker安装rabbitmq 3、docker安装mysql docker安装elasticsearch和kibana docker系列一、安装elasticsearch二、安装kibana三、安装ik分词器1、分词器说明2、安装分词器 本篇文章所采用的elasticsearch和kibana版本以及ik分词器都是7.12.…

AS安装目录

编辑器: sdk: gradle: gradle使用的jdk目录:Gradle使用的jdk是android studio安装目录下的jbr 成功项目的android studio配置:

动态内存的管理malloc、free、calloc、realloc

身在井隅,心向星光 眼里有诗,自在远方 目录 动态内存的简单介绍 动态内存的优势 可以控制内存的大小 可以多次利用这部分空间 动态内存函数malloc、free malloc开辟函数 free释放函数 动态内存函数calloc、realloc calloc开辟函数 realloc调整函数 动…

生产问题: 利用线程Thread预加载数据缓存,其它类全局变量获取缓存偶发加载不到

生产问题: 利用线程Thread预加载数据缓存偶发加载不到 先上代码 public class ThreadTest {//本地缓存Map<String, Object> map new HashMap<String, Object>();class ThreadA implements Runnable{Overridepublic void run() {System.out.println("Thread…

笔记本电脑word打字延迟特别大,但是浏览器中打字没有延迟,如何解决这个问题。

问题描述&#xff1a; 笔记本电脑word打字延迟特别大&#xff0c;但是浏览器中打字没有延迟&#xff0c;如何解决这个问题。&#xff08;之前以为是自己的电脑用了6年&#xff0c;用的时间久了&#xff0c;硬件老化导致的&#xff0c;本来想直接换电脑的&#xff0c;但是想着去…

鸿蒙前端开发-构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Serv…

数据库连接池Druid

在 Spring Boot 项目中&#xff0c;数据库连接池已经成为标配&#xff0c;然而&#xff0c;我曾经遇到过不少连接池异常导致业务错误的事故。很多经验丰富的工程师也可能不小心在这方面出现问题。 在这篇文章中&#xff0c;我们将探讨数据库连接池&#xff0c;深入解析其实现机…

探索开源游戏的乐趣与无限可能 | 开源专题 No.47

CleverRaven/Cataclysm-DDA Stars: 9.0k License: NOASSERTION Cataclysm&#xff1a;Dark Days Ahead 是一个回合制的生存游戏&#xff0c;设定在一个后启示录世界中。尽管有些人将其描述为 “僵尸游戏”&#xff0c;但 Cataclysm 远不止于此。在这个残酷、持久、程序生成的世…

抓取真实浏览器设备指纹fingerprint写入cookie方案

一个关于抓取真实浏览器设备指纹写入cookie方案&#xff0c;用户访问页面获取到用户设备生成指纹id&#xff0c;通过js把指纹存入cookie&#xff0c;然后用php进行获取cookie存的指纹值到后台。 用途&#xff1a;追踪用户设备&#xff0c;防恶意注册&#xff0c;防恶意采集 浏…

Android12之解决:scripts/gcc-wrapper.py, line 79, in run_gcc(一百六十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

区块链媒体宣发:揭示优势与趋势,引领信息传播新时代

在数字化潮流中&#xff0c;区块链技术正以惊人的速度改变着传媒行业的格局。从区块链媒体宣发中获得的种种优势和未来的趋势&#xff0c;不仅为企业带来了新的推广途径&#xff0c;也在信息传播领域掀起了一场革命。本文将深入探讨区块链媒体宣发的优势以及未来的发展趋势。 1…

深入理解希尔排序

基本思想 希尔排序(Shells Sort)是插入排序的一种又称“缩小增量排序”&#xff08;Diminishing Increment Sort&#xff09;&#xff0c;是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 对于n个待排序的数列&#xff0c;取一个小于n的整数gap(gap被…

Low Cost and High Performance FPGA with ARM and SDRAM inside

AG10KSDE176 AGM AG10KSDE176 是由 AGM FPGA AG10K 与 SDRAM 叠封集成的芯片&#xff0c;具有 AG10K FPGA 的可编程功能&#xff0c;提供更多可编程 IO&#xff0c;同时内部连接大容量 SDRAM。  FPGA 外部管脚输出 EQFP176 封装底部 Pad 为 GND&#xff0c;管脚说明请见下表&…

计网Lesson8 - NAT技术与链路层概述

文章目录 NAT 技术1. 因特网的接入方式2. 公网和私网3. NAT 技术 链路层1. 数据链路层概述2. 数据链路层的三个问题2.1 封装成帧2.2 透明传输2.3 差错检测 NAT 技术 1. 因特网的接入方式 光猫将电信号转换为数字信号发送给路由器 光纤入户 光纤传递的就是数字信号&#xff0c…

uniapp iOS离线打包——运行项目到模拟器报错?

运行项目、打包时报错问题 记录个人在开发过程中遇到的相关问题&#xff0c;后续有时间会不定时更新 文章目录 运行项目、打包时报错问题运行到模拟器报错解决方案 打包报错解决方案 运行到模拟器报错 解决方案 选中项目工程 —> Build Settings 滑动底部 —> User-Defi…

Java网络编程——安全网络通信

在网络上&#xff0c;信息在由源主机到目标主机的传输过程中会经过其他计算机。在一般情况下&#xff0c;中间的计算机不会监听路过的信息。但在使用网上银行或者进行信用卡交易时&#xff0c;网络上的信息有可能被非法分子监听&#xff0c;从而导致个人隐私的泄露。由于Intern…

Leetcode—389.找不同【简单】

2023每日刷题&#xff08;五十五&#xff09; Leetcode—389.找不同 实现代码 char findTheDifference(char* s, char* t) {int len strlen(s);int len2 len 1;int a[26] {0};int b[26] {0};if(len 0) {return t[0];}for(int i 0; i < len; i) {int idx s[i] - a;…