当前位置: 首页 > news >正文

Qt6.7开发安卓程序间接连接到MySQL的方法

本文主要描述一种通过间接的方法,使得Qt开发的安卓程序可以直连到Mysql数据库的方法。本文章的方案是通过JAVA代码去连接MySQL数据库,然后C++代码去调用JAVA的方法,从而实现QT开发的安卓程序去直连到MySQL数据库。
本文使用 JDBC 结合 JNI(Java Native Interface)的方案。因为 Android 原生支持 Java,可以通过 JNI 机制让你的 C++ 代码调用 Java 中的 JDBC API。

1. 总体流程概述

  1. 设置 Android 项目环境,集成 MySQL JDBC 驱动,配置 AndroidManifest.xml;
  2. 编写 Java 代码用于 JDBC 连接;
  3. 将 Java 方法暴露给 C++ 代码(JNI)
  4. 编译并运行

2. 设置 Android 项目环境,集成 MySQL JDBC 驱动

2.1 设置 Android 项目环境

首先,在 Qt 项目中设置好 Android 开发环境,并确保 Android SDK 和 NDK 正确配置。
需要确保在QT项目中存在**“android”文件夹**。可以参考下面方式进行添加:
在这里插入图片描述
在这里插入图片描述
最后在项目目录下应该会生成一个“android”文件夹。

2.2 集成 MySQL JDBC 驱动

为了让 JDBC 工作,你需要将 MySQL 的 JDBC 驱动包含在 Android 应用中。你可以从 MySQL 官方网站下载 JDBC 驱动,并将 mysql-connector-java-X.X.X.jar 添加到 Android 项目中。

  1. 选择版本:选择合适的 MySQL Connector/J 版本(例如 8.0),通常建议使用最新稳定版本。
  2. 选择操作系统时的选项:在下载页面,操作系统部分选择 “Platform Independent”(平台无关),因为它是 Java 实现,不依赖于具体操作系统。
  3. 下载 .zip 或 .tar.gz 文件:下载后会得到一个压缩包,解压后你就能找到 mysql-connector-java-X.X.X.jar 文件。
  4. 集成到项目中:将 .jar 文件放入你的 Android 项目的 libs 文件夹;如果没有libs文件夹,可以手动创建一个。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 在build.gradle 中配置依赖项:查看android文件夹下“build.gradle”文件中的依赖项,存在这样语句“implementation fileTree(dir: ‘libs’, include: [‘.jar’, '.aar’])”通常不需要额外操作。否则需要手动添加:implementation files(‘libs/mysql-connector-java-X.X.X.jar’)
dependencies {implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])implementation 'androidx.core:core:1.13.1'
}

2.3 配置 AndroidManifest.xml

在 AndroidManifest.xml 文件中,需要声明应用权限来访问网络:
在这里插入图片描述

3. 编写 Java 代码用于 JDBC 连接

需要在 Android 的 Java 部分编写用于连接 MySQL 的 JDBC 代码。
使用qt项目中创建JAVA文件的方法,把目标文件放到“android/src/com”目录下(具体可参考JAVA包目录设置情况进行设置)。没有对应文件夹手动创建即可。
在这里插入图片描述
在这里插入图片描述
添加完成后,在.pro文件中应该会自动添加这个内容:

DISTFILES += \android/src/com/MysqlConnector.java

下面是一个JAVA代码调用mysql的示例:

package com.MysqlConnector;		// 注意,不确定这里缺失会不会有问题import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class MySQLConnector {private static final String url = "jdbc:mysql://<your_mysql_host>:<port>/<database>";private static final String user = "<your_mysql_user>";private static final String password = "<your_mysql_password>";public String getData() {String result = "";try {// 加载 MySQL JDBC 驱动// Class.forName("com.mysql.jdbc.Driver");		// 自测试不要这个也能正常运行// 建立连接Connection conn = DriverManager.getConnection(url, user, password);// 创建 Statement 对象Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM your_table");// 处理结果集while (rs.next()) {result += rs.getString("your_column") + "\n";}// 关闭连接rs.close();stmt.close();conn.close();} catch (Exception e) {e.printStackTrace();}return result;}
}

4. 将 Java 方法暴露给 C++ 代码(JNI)

在 Qt 项目中,创建一个 C++ 文件 jni_interface.cpp,用于定义调用 Java 的 JNI 接口:

#include <QJniObject>
#include <QJniEnvironment>
#include <jni.h>
#include <QDebug>int getMySQLData() {// Step 1: 获取 Java 类的引用QJniObject javaClass("com/MySQLConnector/MySQLConnector");		//注意路径if ( !javaClass.isValid() ) {qDebug() << "Java 类加载失败";return -2;}// Step 3: 调用 Java 方法jint result = javaClass.callMethod<jint>("getData",                // Java 方法名"()Ljava/lang/String;"  // 方法签名);// 检查 JNI 调用是否有异常QJniEnvironment env;if (env->ExceptionCheck()) {env->ExceptionClear();qWarning() << "JNI 调用失败";return -1;}return result; // 返回 Java 方法的结果
}

最后在自己业务代码处调用该方法。

5、编译并运行

最后编译运行试试

相关文章:

Qt6.7开发安卓程序间接连接到MySQL的方法

本文主要描述一种通过间接的方法&#xff0c;使得Qt开发的安卓程序可以直连到Mysql数据库的方法。本文章的方案是通过JAVA代码去连接MySQL数据库&#xff0c;然后C代码去调用JAVA的方法&#xff0c;从而实现QT开发的安卓程序去直连到MySQL数据库。 本文使用 JDBC 结合 JNI&…...

ROW_NUMBER

How to rewrite a query which uses the ROW_NUMBER() window function in versions 5.7 or earlier before window functions were supported e.g., SELECT ROW_NUMBER() OVER (PARTITION BY fieldA) AS rownum, myTable.* FROM myTable; index 用不上的 Solution Assuming…...

Docker技术

目录 Docker的基本概念 Docker的核心原理 Docker的使用场景 Docker的优点 Docker的挑战 为什么使用 环境一致性 快速启动和部署 资源利用率高 支持微服务架构 持续集成与持续交付&#xff08;CI/CD&#xff09; 依赖管理 简化部署流程 高效资源管理 生态系统丰富…...

中小企业做网站需要考虑哪些因素?

中小企业在建设网站时&#xff0c;需要考虑的因素有很多。以下是一些主要考虑因素的介绍&#xff1a; 明确建站目的&#xff1a;中小企业需要明确自己建立网站的目的。是为了展示企业形象、推广产品&#xff0c;还是提供客户服务&#xff1f;不同的目的将决定网站的设计和功能…...

【d60】【Java】【力扣】509. 斐波那契数

思路 要做的问题&#xff1a;求F&#xff08;n&#xff09;, F&#xff08;n&#xff09;就等于F(n-1)F(n-2)&#xff0c;要把这个F(n-1)F(n-2)当作常量&#xff0c;已经得到的值&#xff0c; 结束条件&#xff1a;如果是第1 第2 个数字的时候&#xff0c;没有n-1和n-2,所以…...

项目-坦克大战学习-游戏结束

当boos受到伤害时游戏结束&#xff0c;游戏结束时我们需要将窗体全部绘制从别的画面&#xff0c;这样我们可以在游戏运行类中的update设置条件&#xff0c;在游戏运行类thread创建一个枚举类型定义是否游戏结束 public enum Game { play, over };//定义现在游戏运行状态 如果…...

MySQL基础之约束

MySQL基础之约束 概述 概念&#xff1a;约束是作用在字段的规则&#xff0c;限制表中数据 演示 # 多个约束之间不需要加逗号 # auto_increment 自增 create table user(id int primary key auto_increment comment 主键,name varchar(10) not null unique comment 姓名,age i…...

2024新版IDEA创建JSP项目

1. 创建项目 依次点击file->new->Project 配置如下信息并点击create创建项目 2. 配置Web项目 点击file->Project Structure 在点击Project Settings->Module右键右边模块名称->ADD->Web 点击Create Artifact 出现如下界面就表示配置完毕&#xff0c;…...

Conda创建,打包,删除环境相关及配置cuda

conda创建新环境Anaconda删除虚拟环境conda删除环境conda环境打包迁移及部署Python | Conda pack 进行环境打包Anaconda创建环境、删除环境、激活环境、退出环境Anaconda环境离线迁移_CondaPackError处理Anaconda环境离线迁移移植Anaconda-用conda创建python虚拟环境anaconda 配…...

Linux和指令初识

前言 Linux是我们在服务器中常用的操作系统&#xff0c;我们有必要对这个操作系统有足够的认识&#xff0c;并且能够使相关的指令操作。今天我们就来简单的认识一下这个操作的前世今生&#xff0c;并且介绍一些基础的指令操作 Linux的前世今生 要说Linux&#xff0c;还得从U…...

Vortex GPGPU的github流程跑通与功能模块波形探索(二)

文章目录 前言一、环境配置和debugging.md文档1.1 调试 Vortex GPU1.1.1测试 RTL 或模拟器 GPU 驱动的更改1.1.2 SimX 调试1.1.3 RTL 调试1.1.4 FPGA 调试1.1.5 分析 Vortex 跟踪日志 二、跑出波形文件和日志文件总结 前言 昨天另辟蹊径地去探索了子模块的波形仿真&#xff0c…...

【X线源】微焦点X射线源的基本原理

【X线源】微焦点X射线源的基本原理 1.背景2.原理 1.背景 1895年11月8日&#xff0c;德国物理学家威廉伦琴在研究阴极射线时偶然发现了X射线。当时&#xff0c;他注意到阴极射线管附近的荧光屏发出了光&#xff0c;即使它被纸板遮挡住。经过进一步实验&#xff0c;他意识到这种…...

LeetCode hot100---栈专题(C++语言)

1、有效的括号 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。(2)输入输出描述&#xff1a; 输入&#xff1a;s "()&…...

STM32-MPU6050+DAM库源码(江协笔记)

目录 1、MPU6050简介 2、MPU6050参数 3、MPU6050硬件电路 4、MPU6050结构 5、MPU6000和MPU6050的区别 6、MPU6050应用场景 7、MPU6050电气参数 8、MPU6050时钟源选择 9、MPU6050中断源 10、MPU6050的I2C读写操作 11、DMP库移植 1、MPU6050简介 10轴传感器&#xff1…...

Ruby 数组(Array)

Ruby 数组&#xff08;Array&#xff09; 引言 Ruby&#xff0c;作为一种高级编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。在Ruby中&#xff0c;数组&#xff08;Array&#xff09;是一种基本的数据结构&#xff0c;用于存储一系列有序的元素。本文将深入探讨…...

分享几个做题网站------学习网------工具网;

以下是就是做题网站&#xff1b;趣IT官网-互联网求职刷题神器趣IT——互联网在线刷题学习平台&#xff0c;汇集互联网大厂面试真题&#xff0c;拥有java、C、Python、前端、产品经理、软件测试、新媒体运营等多个热门IT岗位面试笔试题库&#xff0c;提供能力测评、面试刷题、笔…...

Spring MVC__入门

目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC 二、Spring MVC实现原理2.1核心组件2.2工作流程 三、helloworld1、开发环境2、创建maven工程3、配置web.xml4、创建请求控制器5、创建springMVC的配置文件6、测试HelloWorld7、总结 一、SpringMVC简介 1、什么是MVC MV…...

MATLAB GUI组件全解析:构建交互式应用程序

MATLAB的图形用户界面&#xff08;GUI&#xff09;是一个功能强大的工具&#xff0c;它允许开发者创建直观且用户友好的界面。这些界面&#xff0c;也称为应用程序或app&#xff0c;提供了点击控制&#xff0c;使得用户无需学习编程语言或输入命令即可运行应用程序。本文将详细…...

MySQL 实验 2:数据库的创建与管理

MySQL 实验 2&#xff1a;数据库的创建与管理 目录 MySQL 实验 2&#xff1a;数据库的创建与管理一、查看数据库1、语法2、举例 二、创建数据库1、语法2、举例 三、选择数据库1、语法2、举例 四、删除数据库1、语法2、举例 一、查看数据库 1、语法 show databases;2、举例 m…...

LeetCode 2390. 从字符串中移除星号【栈】1347

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

SpringBoot+Vue农产品电商系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

proxy-doctor:自动化诊断与修复开发工具代理配置的利器

1. 项目概述与核心价值最近在折腾一些需要稳定网络连接的项目时&#xff0c;遇到了一个老生常谈但又极其恼人的问题&#xff1a;代理配置。无论是开发环境里的包管理工具&#xff0c;还是日常使用的命令行工具&#xff0c;一旦涉及到网络请求&#xff0c;代理设置不对&#xff…...

如何为《欧洲卡车模拟2》实现完整智能驾驶体验?ETS2LA自动驾驶插件终极指南

如何为《欧洲卡车模拟2》实现完整智能驾驶体验&#xff1f;ETS2LA自动驾驶插件终极指南 【免费下载链接】Euro-Truck-Simulator-2-Lane-Assist Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-Ass…...

基于Claude API构建AI代码生成工具:从API封装到工程化实践

1. 项目概述与核心价值最近在开发者社区里&#xff0c;一个名为ashish200729/claude-code-source-code的项目标题引起了不小的讨论。乍一看&#xff0c;这个标题很容易让人产生误解&#xff0c;以为这是某个知名AI模型的源代码被公开了。但作为一名在软件开发和开源领域摸爬滚打…...

Unity区域加载系统:实现开放世界无缝加载与内存优化

1. 项目概述&#xff1a;一个高效、可扩展的Unity区域加载系统 最近在做一个开放世界风格的项目&#xff0c;场景大了之后&#xff0c;加载卡顿和内存管理就成了老大难问题。传统的Unity场景加载&#xff0c;要么一股脑全塞进内存&#xff0c;要么就得自己写一堆脚本来手动控制…...

Arduino驱动128x64 VFD显示屏:SPI像素回读与图形应用实战

1. 项目概述&#xff1a;为什么选择128x64图形VFD&#xff1f;如果你玩过各种OLED、LCD或者TFT屏幕&#xff0c;可能会觉得显示技术已经足够成熟&#xff0c;亮度、对比度似乎都够用。但当你第一次点亮一块真空荧光显示屏时&#xff0c;那种独特的、带着一丝复古科技感的蓝色辉…...

从零构建Next.js全栈应用:实战解析服务端渲染与API路由

1. 项目概述与核心价值最近在社区里看到不少朋友在讨论一个叫“panaverse/learn-nextjs”的项目&#xff0c;作为一个在Web开发领域摸爬滚打了十多年的老码农&#xff0c;我立刻来了兴趣。这个项目名直译过来就是“Panaverse的Next.js学习项目”&#xff0c;听起来像是一个学习…...

复杂系统交付中的风险治理与经济模型转型

1. 复杂系统交付中的风险本质与治理转型在航空航天、国防军工等复杂系统开发领域&#xff0c;项目失败率长期居高不下。根据IBM对全球500个大型系统的调研&#xff0c;73%的项目存在严重进度延迟&#xff0c;平均超支达到原始预算的189%。这种系统性失效的根源在于传统工程治理…...

2025届毕业生推荐的AI学术平台推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术写作范畴之内&#xff0c;怎样迅速、精确地给论文确定一个既契合规范又能够切实有效吸…...

2026年十大最佳地区搜索排名优化工具:权威榜单赋能企业高效增长

本文全面梳理了2026年十大主流地区搜索排名优化工具的核心功能与应用价值&#xff0c;旨在为本地企业提供客观、实用的选型参考。通过对各工具地域关键词布局、多平台同步能力及实时数据监控等关键模块的解析&#xff0c;结合具体参数指标与套餐定价&#xff0c;系统呈现不同场…...