QT上位机开发(MySql访问)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

网上介绍的关于QT和mysql部分的内容,都是利用Qt自带的mysql库来实现数据读写的。但是事实上来说,即使不用qt带的库,不用odbc,直接使用mysql安装包自带的lib库和dll库,也是可以实现数据访问的,而且也并不复杂。今天,我们正好借着这个机会学习一下,在qt上面怎么使用mysql自带的库进行数据访问。

1、安装mysql软件

这部分可以安装稍微旧一点、但是比较稳定的软件。

2、创建qt widget工程

创建一个qt widget工程,为后续的软件修改做准备。需要注意的是,因为使用的mysql lib库和dll库,他们都是64位的,所以创建qt widget的时候,也必须是64位的。

3、用mysql命令创建一个demo databases

一般创建的databases命令就是create databases demo。创建好demo数据库之后,直接show一下就可以了。

4、设置include目录

因为涉及到mysql头文件目录的位置,所以include一下,

复制代码
C:\Program Files\MySQL\MySQL Server 5.7\include

5、设置lib文件

很多时候并不需要设置lib目录,lib文件少的话,直接设置带目录的lib文件即可,

复制代码
C:\Program Files\MySQL\MySQL Server 5.7\lib\libmysql.lib

6、将lib目录下面的dll文件copy到exe同级目录

这部分工作可以提前做,不然到时候debug的时候,是启动不了的。

7、编写源代码、编译调试

源代码的部分,其实就比较简单了。首先就是mysql_init初始化,接着用mysql_real_connect链接数据库。后续的动作基本就是sop了,比如创建表、插入数据、更新数据、删除数据、查找数据、打印数据等等,这部分找到对应的api,一个一个去调试即可。当然,结束的时候,最好把mysql的资源也要一个一个去释放掉。

复制代码
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>

// Function to handle errors
void handle_error(MYSQL *conn, const char *message) {
	fprintf(stderr, "%s: %s\n", message, mysql_error(conn));
	mysql_close(conn);
	exit(1);
}

int main() {
	MYSQL *conn;

	// Initialize MySQL library
	conn = mysql_init(NULL);
	if (conn == NULL) {
		fprintf(stderr, "mysql_init() failed\n");
		exit(1);
	}

	// Connect to MySQL server
	if (mysql_real_connect(conn, "localhost", "root", "12345678", "demo", 0, NULL, 0) == NULL) {
		handle_error(conn, "mysql_real_connect() failed");
	}

	// Create a table (if it doesn't exist)
	if (mysql_query(conn, "CREATE TABLE IF NOT EXISTS your_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))")) {
		handle_error(conn, "mysql_query() failed for CREATE TABLE");
	}

	// Example: Insert data
	if (mysql_query(conn, "INSERT INTO your_table (name) VALUES ('John'), ('Jane')")) {
		handle_error(conn, "mysql_query() failed for INSERT");
	}

	// Example: Update data
	if (mysql_query(conn, "UPDATE your_table SET name = 'Johnny' WHERE id = 1")) {
		handle_error(conn, "mysql_query() failed for UPDATE");
	}

	// Example: Delete data
	if (mysql_query(conn, "DELETE FROM your_table WHERE id = 2")) {
		handle_error(conn, "mysql_query() failed for DELETE");
	}

	// Example: Query data
	if (mysql_query(conn, "SELECT * FROM your_table")) {
		handle_error(conn, "mysql_query() failed for SELECT");
	}

	// Retrieve and print results
	MYSQL_RES *result = mysql_store_result(conn);
	if (result == NULL) {
		handle_error(conn, "mysql_store_result() failed");
	}

	MYSQL_ROW row;
	while ((row = mysql_fetch_row(result))) {
		printf("ID: %s, Name: %s\n", row[0], row[1]);
	}

	// Free result set
	mysql_free_result(result);

	// Close connection
	mysql_close(conn);

	// Cleanup MySQL library
	mysql_library_end();

	return 0;
}
相关推荐
daxiangxm17 分钟前
GEO策略:让AI直接引用你的内容
开发语言·团队开发·运维开发·个人开发·数据库开发
泡海椒28 分钟前
JQuick-Excel 实战:用 VALIDATION 建立可维护的 Excel 导入校验
开发语言·python·excel
longlongzihan32 分钟前
前缀积与后缀积 —— LeetCode 238. 除了自身以外数组的乘积
开发语言·c++·leetcode
szial1 小时前
JavaScript 的 call、apply 和 bind:如何控制函数调用
开发语言·前端·javascript
weixin_307779131 小时前
C++代码实现MATLAB中的cvpartition函数功能
开发语言·c++·算法·matlab
黑妹天下第一乖1 小时前
小智改造实战解读-首 token 延迟去哪了:云端与端侧大模型的分段对照
开发语言·人工智能·python·嵌入式硬件·自然语言处理·iot
。小二1 小时前
Go 泛型并发利刃:async 库深度评测——370K ops/s、零依赖、生产就绪
开发语言·javascript·golang
(Charon)1 小时前
【C++面试】线程同步机制:互斥锁、条件变量、原子操作与读写锁
开发语言·c++·算法·面试
CV工程师丁Sir1 小时前
ArkWeb 手记 06|window.open 与页面跳转拦截
开发语言·php·harmonyos
夜不会漫长1 小时前
C++:内存管理
java·开发语言·c++