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

news2024/11/20 9:18:07

本文主要描述一种通过间接的方法,使得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文件的方法,创建的文件应该会在项目的一级目录下。下面是一个示例:

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("MySQLConnector");

    // 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、编译并运行

最后编译运行试试

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

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

相关文章

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10-arm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;s…

加速 Python for 循环

在 Python 编程中&#xff0c;for 循环是开发者常用的工具之一&#xff0c;但它的执行速度经常让人感到不满。幸运的是&#xff0c;有许多方法可以显著提高 for 循环的效率。 本文将介绍几种简单而高效的优化技巧&#xff0c;帮助你加速Python for 循环&#xff0c;速度提升从…

[ComfyUI]Flux:超美3D微观山水禅意,经典中文元素AI重现,佛陀楼阁山水画卷

在数字艺术和创意领域&#xff0c;[ComfyUI]Flux以其独特的虚实结合技术&#xff0c;已经成为艺术家和设计师们手中的利器。今天&#xff0c;我们激动地宣布&#xff0c;[ComfyUI]Flux带来了一款超美的3D微观山水禅意作品&#xff0c;经典中文元素通过AI技术重现&#xff0c;包…

现实版宫斗剧《OpenAI传》,正在上演!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

海外盲盒系统开发的机遇与挑战

随着全球消费市场的多元化&#xff0c;盲盒&#xff08;Blind Box&#xff09;作为一种新兴的商业模式&#xff0c;逐渐在各个国家和地区崭露头角。特别是在海外市场&#xff0c;盲盒的受欢迎程度不断攀升。这一现象引发了很多创业者和企业的关注&#xff0c;纷纷投入到海外盲盒…

FreeRTOS列表与列表项

1.什么是列表与列表项 列表与列表项实际上是FreeRTOS中一个大量使用的一种数据结构 1.列表 列表的概念有点像链表&#xff0c;在 FreeRTOS 中&#xff0c;列表主要用于以下几个方面&#xff1a; 任务的管理&#xff1a;FreeRTOS 使用列表来管理不同的任务&#xff0c;包括就…

使用Rasterio处理栅格数据——RaterIO介绍

1. 依赖关系 RasterIO 有一个C库依赖项: GDAL >=1.11 。 GDAL 本身依赖于大多数主要操作系统提供的许多其他库,也依赖于非标准 Geos 和 Proj4 库。 Python 包依赖项(另请参见requirements.txt): affine , cligj , click , enum34 , numpy 。 开发还需要(参见 requi…

keil5程序编译没错误魔术棒可以识别芯片但是就是下载报错Error: Flash Download failed - “Cortex-M3“

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、硬件查看是否连接错误二、软件查看芯片包&#xff0c;更新到最新版本三、Debug下载模式选择四、芯片大小选择后记…

07_矩形圆形绘制

import cv2 import numpy as np newImageInfo (600,600,3) dst np.zeros(newImageInfo,np.uint8) # 1 2 左上角 3 右下角 4 5 fill -1 >0 line w cv2.rectangle(dst,(150,380),(350,550),(150,200,100),3) # 2 center 3 r cv2.circle(dst,(250,250),(100),(0,0,255),6) …

Sunbit币昇加密交易所分析加密货币总市值回升突破2.4万亿美元

每经AI快讯&#xff0c;9月27日&#xff0c;据CoinGecko数据&#xff0c;加密货币总市值回升至2.402万亿美元&#xff0c;24小时涨幅达1.1%。 全球历史最悠久的加密货币交易所之一,总部位于旧金山,Sunbit(币昇)Sunbit已荣获美国及加拿大MSB双牌照 ▌贝莱德增持1684枚BTC&#…

考拉悠然亮相天府人工智能大会,共绘AI赋能产业升级新蓝图

9月28日&#xff0c;备受瞩目的天府人工智能大会在成都拉开帷幕。本次大会是电子科技大学联合重要学术团体、政府相关部门、知名高校、科研机构和企事业单位等共同打造的人工智能领域顶尖峰会。 考拉悠然作为电子科技大学在产学研创新应用领域的杰出企业代表&#xff0c;荣幸受…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十二章 Linux 权限管理

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

“领航计划”取得重要阶段性成果,以科创教育推进科学教育高质量发展

党的二十大报告提出“坚持教育优先发展、科技自立自强、人才引领驱动……教育、科技、人才是全面建设社会主义现代化国家的基础性、战略性支撑”&#xff0c;从根本上体现了教育、科技、人才三者之间的关联。创新作为科技发展的根本动力&#xff0c;创新人才的培育之基在学校教…

使用C代码接入并操作PostgreSQL数据库

使用C代码接入并操作PostgreSQL数据库 引言准备工作在Debian/Ubuntu上安装在RedHat/CentOS上安装在Windows上安装编写C程序引入头文件建立连接执行SQL语句处理查询结果关闭连接完整示例编译和运行程序注意事项结论引言 PostgreSQL是一种功能强大的开源对象关系数据库系统,广泛…

TypeError: unsupported operand type(s) for +=: ‘Dense‘ and ‘str‘

tensorflow2.0报这个错误 因为你在定义模型的时候 model Sequential(SimpleRNN(3),Dense(5, activationsoftmax) )是不是感觉少了点什么&#xff0c;没加[] model Sequential([SimpleRNN(3),Dense(5, activationsoftmax)] )

TypeScript 设计模式之【访问者模式】

文章目录 访问者模式&#xff1a;灵活的文件系统扫描器访问者模式的奥秘访问者模式有什么利与弊?如何使用访问者模式来优化你的系统代码实现案例访问者模式的主要优点访问者模式的主要缺点访问者模式的适用场景总结 访问者模式&#xff1a;灵活的文件系统扫描器 假如你正在开…

智能物流行业惨淡,工程师们的“灰色地带”收入揭秘

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 在智能物流行业面临挑战的当下&#xff0c;工程师们除了正职收入外&#xff0c;也在探索各种途径来增加自己的“额外收益”。 这些收入&…

微信小程序环境下的相亲交友系统源码优化

随着移动互联网的迅猛发展&#xff0c;微信小程序因其便捷性和易用性成为众多开发者的选择。在这样一个背景下&#xff0c;相亲交友系统作为连接人与人的桥梁&#xff0c;也逐渐融入到了小程序的生态之中。本文旨在探讨如何在微信小程序环境中优化相亲交友系统的源码&#xff0…

云计算Openstack Cinder

OpenStack Cinder是OpenStack平台中的一个重要组件&#xff0c;它主要提供块存储服务。 一、基本概念 定义&#xff1a;Cinder是OpenStack项目中的一个模块&#xff0c;专注于为云计算环境中的虚拟机提供持久化的块存储服务。功能&#xff1a;Cinder允许用户创建和管理持久化…

前端辅助工具分享(像素大厨)

引言&#xff1a; 我们在从事前端开发工作时&#xff0c;常会需要测量许多盒子的尺寸&#xff0c;颜色提取种种&#xff0c;切图&#xff0c;还有文字大小等信息&#xff0c;光从肉眼很难看出来&#xff0c;当然我们传统的会使用Photoshop来帮助我们完成这些工作&#xff0c;但…