Qt 数据库SQL

在这里插入图片描述

用户接口层、SQL接口层和驱动层是数据库系统中的三个重要组成部分,它们分别负责不同的功能。

用户接口层

用户接口层
用户接口层是用户与数据库系统交互的界面。它提供了一些简单易用的工具和方法,使得用户可以方便地进行数据操作。例如,常见的数据库管理工具(如MySQL Workbench)就是一个典型的用户接口层应用。

SQL接口层

SQL接口层
SQL接口层是连接用户接口层和底层驱动程序之间的桥梁。它负责解析SQL语句,并将其转换为底层驱动程序可以执行的命令。同时,SQL接口层还提供了一些高级功能,例如事务处理、游标控制等。

驱动层

驱动层
驱动层是数据库系统中最底层的组成部分。它直接与物理存储设备(如磁盘)进行交互,并负责将数据读取到内存中或将内存中的数据写入到磁盘中。不同类型的数据库需要不同类型的驱动程序来实现数据访问。常见的驱动程序包括ODBC、JDBC、QtSql等。

总体来说,这三个组成部分相互协作,形成了一个完整的数据库系统,在其中用户可以通过用户接口层进行数据操作,SQL接口层负责解析和执行SQL语句,底层驱动程序则负责将数据读写到物理存储设备中。

通俗来讲

假设你是一家商店的老板,想要管理商品和客户信息。那么,你需要一个数据库系统来存储这些数据,并且可以方便地进行查询、修改、删除等操作。
1 在这个例子中,用户接口层就是你使用的商店管理软件界面,它提供了各种按钮、菜单和输入框等工具,使得你可以直观地进行商品和客户信息的管理。
2 SQL接口层就像是一个翻译,将你在用户接口层输入的指令(例如“添加一件商品”、“查询某个客户信息”)翻译成计算机可以理解的语言,并将其传递给底层驱动程序。
3 底层驱动程序则负责从物理存储设备(例如硬盘)中读取或写入数据。例如,当你在商店管理软件中添加一件商品时,底层驱动程序会将这个操作转换为一条SQL语句,并将其写入到磁盘上的数据库文件中。
总体来说,用户接口层、SQL接口层和驱动层相互协作,在后台完成了各种数据操作任务。

创建连接数据库

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL",“name");  当建立多个数据库时 需要靠name区分 在查询中体现
QSqlQuery query;  //创建表并写入数据
    query.exec("create table student(id int primary key,name varchar(20) )");
    query.exec("insert into student values(0,'liming')");
    query.exec("insert into student values(1,'xiaoer')");
    query.exec("insert into student values(2,'xiaosan')");

查询

QSqlQuery query;  // 默认数据库 ,只有一个时
//QSqlQuery query(name);  多个数据库时,name区分
    query.exec("select * from student");
    while (query.next()) {
        qDebug()<<query.value(0).toInt()<<query.value(1).toString();
    }

两个数据库示例

main.cpp

#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QStringList>
#include "connection.h"
#include <QVariant>
#include <QSqlDriver>
#include <QSqlRecord>
#include <QSqlField>
#include <QSqlError>
/*
    这里主要是使用了QSqlDatabase的database()静态函数通过指定连接名来获取相应的数据库连接,
    然后在 QSqlQuery 中使用该连接进行数据库的查询操作。现在运行程序就可以输出两个表中的内容了,
    而在项目生成的目录中也可以看到生成的 myl.db和my2.db两个数据库文件。
*/
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建数据库连接
    if (!createConnection()) return 1;

    // 使用QSqlQuery查询连接1的整张表,先要使用连接名获取该连接
    QSqlDatabase db1 = QSqlDatabase::database("connection1");
    QSqlQuery query1(db1);
    qDebug() << "connection1:";
    query1.exec("select * from student");
    while(query1.next())
    {
        qDebug() << query1.value(0).toInt() << query1.value(1).toString();
    }

    // 使用QSqlQuery查询连接2的整张表
    QSqlDatabase db2 = QSqlDatabase::database("connection2");
    QSqlQuery query2(db2);
    qDebug() << "connection2:";
    query2.exec("select * from student");
    while(query2.next())
    {
        qDebug() << query2.value(0).toInt() << query2.value(1).toString();
    }
    return a.exec()
 }
 

connection.h

#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>

static bool createConnection()
{
    // 创建一个数据库连接,使用“connection1”为连接名
    QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE", "connection1");
    db1.setDatabaseName("my1.db");
    if (!db1.open()) {
        QMessageBox::critical(0, "Cannot open database1",
                              "Unable to establish a database connection.", QMessageBox::Cancel);
        return false;
    }

    // 这里要指定连接
    QSqlQuery query1(db1);
    query1.exec("create table student (id int primary key, "
                "name varchar(20))");
    query1.exec("insert into student values(0, 'LiMing')");
    query1.exec("insert into student values(1, 'LiuTao')");
    query1.exec("insert into student values(2, 'WangHong')");

    // 创建另一个数据库连接,要使用不同的连接名,这里是“connection2”
    QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE", "connection2");
    db2.setDatabaseName("my2.db");
    if (!db2.open()) {
        QMessageBox::critical(0, "Cannot open database1",
                              "Unable to establish a database connection.", QMessageBox::Cancel);
        return false;
    }

    // 这里要指定连接
    QSqlQuery query2(db2);
    query2.exec("create table student (id int primary key, "
                "name varchar(20))");
    query2.exec("insert into student values(10, 'LiQiang')");
    query2.exec("insert into student values(11, 'MaLiang')");
    query2.exec("insert into student values(12, 'ZhangBin')");
    return true;
}

#endif // CONNECTION_H


dbug文件夹中就会出现这两个
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛郎恋刘娘,刘娘念牛郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值