写点什么

Qt 使用 kingbase 数据库存储数据 (完成考勤系统数据增删改查)

作者:DS小龙哥
  • 2024-09-11
    重庆
  • 本文字数:3607 字

    阅读完需:约 12 分钟

一、功能介绍

当前基于 Qt(C++)开发了一款教室上课考勤系统的软件,主要是使用了 Kingbase 数据库进行数据存储和管理。


完成的具体功能如下:


(1)功能齐全:软件可以完成学生、教师和管理员的登陆和注册,教师可以发布课程信息和考勤信息,学生可以查看自己的课程信息和考勤记录,管理员可以对教师和学生信息进行管理。软件具有数据可视化等功能,方便管理员直观地了解教学情况。


(2)高效稳定:采用了 Kingbase 数据库存储数据,保证了数据存储的可靠性和一致性,同时也提高了系统性能和响应速度。在程序设计方面采用了 MVC 模式,将程序的逻辑与界面分离,使得程序结构清晰,易于维护和扩展。


(3)用户友好:采用了人性化的操作界面和交互方式,让用户能够方便地浏览和管理课程和考勤记录。考虑到了软件的安全性问题,采用了哈希加密算法保护用户密码。



二、Kingbase 数据库介绍

Kingbase 是中国国产的关系型数据库管理系统,支持 SQL/92 标准,同时也支持 PL/SQL、T-SQL 等多种编程语言,拥有高性能、高可靠性、高安全性等特点,广泛应用于电信、金融、保险、能源等行业领域。


Kingbase 数据库是基于 PostgreSQL 核心技术开发的一个商业化数据库系统,因此它与 PostgreSQL 在许多方面相似,如语法、存储引擎和模式等。但与 PostgreSQL 不同的是,Kingbase 数据库具有更强的自主知识产权和更丰富的中文支持,包括对汉字排序、全文检索、文字匹配等功能。


Kingbase 数据库支持多种操作系统平台,包括 Windows、Linux、AIX、HP-UX 和 Solaris 等。其核心技术包括:


(1)分布式事务


Kingbase 数据库采用高效的分布式事务管理技术,可以实现多节点之间的数据一致性,并保证高可靠性和交易性能。同时也支持 ACID 事务属性。


(2)并行查询处理


Kingbase 数据库采用多核、多线程的并行查询处理机制,提升查询性能和处理效率。此外,Kingbase 还支持在线索引重组、预查询缓存等优化技术,可以进一步提升查询性能。


(3)大数据存储和处理


Kingbase 数据库采用分布式数据存储和处理技术,可以支持 TB 级别的数据存储和处理。同时还支持分片、备份恢复、灾备等数据管理技术,保证数据可靠性和安全性。


(4)高可用性和负载均衡


Kingbase 数据库支持负载均衡和高可用性集群,用户可以根据需要选择不同的部署方式,来满足业务需求。此外,Kingbase 还支持在线伸缩、容错恢复等功能,加强了系统的鲁棒性和可扩展性。

三、Kingbase 数据库使用流程

(1)安装部署 Kingbase 数据库软件;


[1]下载安装包:从官方网站下载Kingbase数据库的安装包,根据需要选择32位或64位版本,并根据实际情况选择合适的版本号和操作系统类型。
[2]运行安装程序:双击安装包,按照提示一步步进行安装。在安装过程中可以选择安装路径、开启服务等选项,需要根据实际需求进行选择。
[3]配置环境变量:安装完成后,需要将Kingbase安装目录添加到系统环境变量中,以便于在命令行中直接使用Kingbase命令。具体方法是在“控制面板” -> “系统和安全” -> “系统” -> “高级系统设置” -> “环境变量”中添加环境变量KINGBASE_HOME并设置为Kingbase的安装路径。
[4]启动服务:打开“服务”管理器,找到Kingbase相关的服务并启动。
[5]测试连接:在命令行中输入Kingbase命令,测试是否成功连接到了数据库。也可以使用数据库客户端工具测试连接。
[6]部署应用程序:如果需要在本机上部署应用程序,需要将Kingbase客户端库文件拷贝到应用程序运行目录,并在代码中指定数据库连接字符串。
复制代码


(2)创建 Kingbase 数据库用户,并授权访问数据库;


在Kingbase数据库中,创建用户并授权访问数据库的步骤:
[1]创建用户:使用CREATE USER语句创建用户,并设置密码。例如,创建名为“user1”的用户,密码为“123456”的SQL语句如下:CREATE USER user1 IDENTIFIED BY 123456;
[2]授予权限:在Kingbase中,权限控制是通过角色(或者说是用户组)来实现的。因此,需要先创建角色,并为角色分配权限,然后将用户添加到该角色中。
[3]创建角色和分配权限:使用CREATE ROLE和GRANT语句创建角色并分配权限。例如,创建名为“role1”的角色,并赋予查询、插入、修改、删除表的权限的SQL语句如下:CREATE ROLE role1;GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE tablename TO role1;这样,“role1”角色就拥有了对“tablename”表的查询、插入、修改、删除权限。
[4]将用户添加到角色中:使用GRANT语句将用户添加到指定的角色中。例如,将名为“user1”的用户添加到“role1”角色中的SQL语句如下:GRANT role1 TO user1;这样,“user1”用户就拥有了“role1”角色所拥有的权限,即对“tablename”表的查询、插入、修改、删除权限。
[5]测试权限:使用“user1”用户登录数据库,测试是否可以正常访问数据库中的表。例如,在命令行中使用psql工具登录数据库,然后查询表的内容:psql -U user1 -d dbname -h localhostSELECT * FROM tablename;如果可以正常查询到表的内容,则说明用户已经成功授权访问数据库。
复制代码


(3)在 Qt 中添加 Kingbase 驱动程序,并连接数据库。


步骤如下:


(1)Kingbase 数据库软件安装和用户授权


从 Kingbase 官方网站上下载最新版本的 Kingbase 数据库软件安装部署到电脑。创建 Kingbase 数据库用户,并授权该用户对指定的数据库进行访问。


比如: 可以创建一个名为 myuser 的用户,密码为 mypassword,并授权该用户对 mydatabase 数据库进行访问。


(2)添加 Kingbase 驱动程序


在 Qt 中添加 Kingbase 驱动程序,以便于连接 Kingbase 数据库。


在 Qt 的项目文件中(例如 .pro 文件),添加以下代码行:使 Qt 中的 SQL 模块可以使用。


QT += sql
复制代码


在 Qt Creator 编辑器中,选择菜单栏的 Tools > Options > Build & Run > Kits ,找到正在使用的编译套件,然后选择其 Compilers> C++ 基础部分。在其中,找到并选中 C++11 选项,保存更改。


在 pro 文件中添加以下行:


CONFIG += c++11
复制代码


在 .pro 文件中添加以下行:


LIBS += -L/path/to/kingbase/libraries -lkbclientINCLUDEPATH += /path/to/kingbase/headers
复制代码


/path/to/kingbase/libraries 是 Kingbase 安装目录中的库文件路径,/path/to/kingbase/headers 是 Kingbase 安装目录的头文件路径。


在最终的代码中添加以下行:


#include <QSqlDatabase>#include <QSqlQuery>#include <QSqlError>
QSqlDatabase db = QSqlDatabase::addDatabase("QKBClient");db.setHostName("localhost");db.setDatabaseName("mydatabase");db.setUserName("myuser");db.setPassword("mypassword");bool ok = db.open();if (!ok) { qDebug() << "Failed to connect to database: " << db.lastError().text();}
复制代码


创建一个名为 db 的数据库连接对象,并使用 Kingbase 驱动程序连接到指定的数据库。


(3)使用 Kingbase 数据库


连接成功之后,就可以使用 Qt 的 SQL 模块进行数据操作。


示例代码: 使用以下代码查询数据库中的数据:


QSqlQuery query;query.prepare("SELECT * FROM mytable WHERE id = :id");query.bindValue(":id", 42);bool ok = query.exec();if (ok) {    while (query.next()) {        QString name = query.value("name").toString();        int age = query.value("age").toInt();        qDebug() << "Name: " << name << ", Age: " << age;    }} else {    qDebug() << "Error querying database: " << query.lastError().text();}
复制代码


以上代码即可查询名为 mytable 的表中 id 为 42 的记录,输出该记录的 nameage 字段。

四、对 Kingbase 数据库进行增删改查

下面是对 Kingbase 数据库的增删改查的所有功能实现代码:


// 创建数据库连接QSqlDatabase db = QSqlDatabase::addDatabase("QKBASE");db.setHostName("localhost");db.setPort(5432);db.setDatabaseName("mydatabase");db.setUserName("root");db.setPassword("password");
// 打开数据库连接if(db.open()){ qDebug() << "database open success!";}else{ qDebug() << "database open failed!" << db.lastError().text();}
// 插入数据QSqlQuery query;query.prepare("INSERT INTO student (id, name, age) VALUES (:id, :name, :age)");query.bindValue(":id", 1);query.bindValue(":name", "Tom");query.bindValue(":age", 18);query.exec();
// 更新数据query.prepare("UPDATE student SET age=:age WHERE id=:id");query.bindValue(":age", 20);query.bindValue(":id", 1);query.exec();
// 删除数据query.prepare("DELETE FROM student WHERE id=:id");query.bindValue(":id", 1);query.exec();
// 查询数据query.exec("SELECT * FROM student");while(query.next()){ int id = query.value(0).toInt(); QString name = query.value(1).toString(); int age = query.value(2).toInt(); qDebug() << "id:" << id << "name:" << name << "age:" << age;}
// 关闭数据库连接db.close();
复制代码


发布于: 刚刚阅读数: 3
用户头像

DS小龙哥

关注

微信公众号:DS小龙哥嵌入式技术资讯 2022-01-06 加入

所有项目文章对应的工程源码,都可以在我的微信公众号:《DS小龙哥嵌入式技术资讯》 里下载。

评论

发布
暂无评论
Qt使用kingbase数据库存储数据(完成考勤系统数据增删改查)_9月日更_DS小龙哥_InfoQ写作社区