0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2023-06-12 08:42 次阅读

一、功能介绍

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

完成的具体功能如下:

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

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

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

image-20220111152720278

image-20220111152756920

二、Kingbase数据库介绍

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

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

Kingbase数据库支持多种操作系统平台,包括Windows、LinuxAIX、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 ROLEGRANT语句创建角色并分配权限。例如,创建名为“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 localhost
 SELECT * 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 -lkbclient
 INCLUDEPATH += /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();

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3763

    浏览量

    64274
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73489
  • Qt
    Qt
    +关注

    关注

    1

    文章

    301

    浏览量

    37829
  • 管理系统
    +关注

    关注

    1

    文章

    2417

    浏览量

    35824
收藏 人收藏

    评论

    相关推荐

    Qt(C++)使用SQLite数据库完成数据增删改

    当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据存储,并且支持数据增删改
    的头像 发表于 06-21 09:10 1650次阅读
    <b class='flag-5'>Qt</b>(C++)使用SQLite<b class='flag-5'>数据库</b><b class='flag-5'>完成数据</b><b class='flag-5'>增删改</b><b class='flag-5'>查</b>

    Mybatis自动生成增删改代码

    使用 mybatis generator 自动生成代码,实现数据库增删改。 1 配置Mybatis插件 在pom文件添加依赖: pluginsplugin
    的头像 发表于 01-13 15:43 1068次阅读
    Mybatis自动生成<b class='flag-5'>增删改</b><b class='flag-5'>查</b>代码

    Qt(C++)使用SQLite数据库完成数据增删改

    当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据存储,并且支持数据增删改
    的头像 发表于 08-28 11:34 1836次阅读

    (专题)Labview 对于大数据的操作 途径:使用数据库

    等等对数据库进行增删改。使用的数据库是微软的小型数据库Access。有期望进一步讨论的坛友请联系:QQ:470885756E-mail@w
    发表于 10-15 09:52

    如何在本地电脑中输入access数据库路径,对它进行增删改

    各位大佬好,麻烦指导下如何在本地电脑中通过输入access数据库路径,对它进行增删改
    发表于 01-03 09:49

    如何用php调用mysql数据库实现增删改

    php调用mysql数据库实现增删改
    发表于 04-09 12:53

    Xutils的数据库的简单使用方法

    Xutils框架之DBUtils(DbManager)数据库增删改
    发表于 06-08 08:07

    python是如何实现hbase增删改

    hbase shell是怎样去创建命名空间的?python是如何实现hbase增删改的?求解
    发表于 10-19 07:26

    用JDBC连接MySQL数据库并进行简单的增删改操作

    本文主要详细讲解了用JDBC连接MySQL数据库并进行简单的增删改操作。Java 数据库连接是Java语言中用来规范客户端程序如何来访问数据库
    发表于 02-06 09:21 6295次阅读
    用JDBC连接MySQL<b class='flag-5'>数据库</b>并进行简单的<b class='flag-5'>增删改</b><b class='flag-5'>查</b>操作

    PHP数据库教程之增删改数据高级操作资料免费下载

    本文档的主要内容详细介绍的是PHP数据库教程之增删改数据高级操作资料免费下载。
    发表于 07-02 17:40 1次下载

    如何用Python对数据库中的数据进行增删改

    pyhton如何连接mysql数据库 1、导入模块 2、打开数据库连接 3、创建游标对象cursor 如何用Python对数据库中的数据进行增删改
    的头像 发表于 08-05 10:22 8291次阅读

    SQLite数据库增删改

    SQLite数据库增删改  SQLite是一种轻量级的RDBMS(关系型数据库管理系统),具有速度快、易用性高等优点。虽然SQLite
    的头像 发表于 08-28 17:09 1175次阅读

    mysql数据库增删改sql语句

    MySQL是一种常用的关系型数据库管理系统,是许多网站和应用程序的首选数据库。在MySQL中,我们可以使用SQL(结构化查询语言)进行数据增删改
    的头像 发表于 11-16 15:41 1147次阅读

    数据库mysql基本增删改

    MySQL是一种开源的关系型数据库管理系统,常用于Web应用程序的数据存储和管理。通过使用MySQL,用户可以进行数据
    的头像 发表于 11-16 16:35 1466次阅读

    mysql数据库增删改基本语句

    MySQL是一种关系型数据库管理系统,提供了丰富的功能和语法,来支持数据增删改。在本文中,将详细介绍MySQL
    的头像 发表于 11-16 16:36 917次阅读