ubuntu-18.04 linux-QT版 演示sqlite3增删改查

news/2024/5/18 15:17:26 标签: 数据库, qt, sqlite3, 数据库增删改查, ubuntu-18.04

ubuntu-18.04 linux-QT版 演示sqlite3增删改查

  • 【1】sqlite3_test1.pro
  • 【2】mainwindow.ui
  • 【3】mainwindow.h
  • 【4】mainwindow.cpp
  • 【5】效果演示


sqlite3_test1pro_3">【1】sqlite3_test1.pro

添加sql

在这里插入图片描述

【2】mainwindow.ui

在这里插入图片描述


【3】mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QDebug>
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QString>
#include <QTextCodec>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
//   2022-11-5
typedef struct SQL_DATA{
    QString car_id;             /* 车牌号 */
    QString car_pos;            /* 车位号 */
    QString card_id;           /* 卡号 */
    int age;                   /* 人脸特征数据大小 */
    QByteArray t_featuredata; /* 人脸特征数据 */
    QString t_datetime;       /* 存车时间 */
} SQL_DATA_TypeDef;
/*Q_DECLARE_METATYPE ->这个宏只要提供公共默认构造函数、公共复制构造函数。需要在QVariant中使用类型作为自定义类型。*/
Q_DECLARE_METATYPE(SQL_DATA)

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_7_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

private:
    Ui::MainWindow *ui;
    QSqlDatabase db1;
    QSqlDatabase db2;
    QSqlQuery *que;
    QSqlRecord rec;
};
#endif // MAINWINDOW_H


【4】mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //ZH_CHINA
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
}

MainWindow::~MainWindow()
{
    delete ui;
}
//create database
void MainWindow::on_pushButton_6_clicked()
{
    db1.removeDatabase("RB");//every create database dalete
    db1 = QSqlDatabase::addDatabase("QSQLITE","RB");
    db1.setDatabaseName("1.db");
    bool ret = db1.open();
    if(ret == true)
        ui->textEdit->append("open 1.db sucess");
    else
        ui->textEdit->append(db1.lastError().text());
    que = new QSqlQuery(db1);
}
//create table
void MainWindow::on_pushButton_2_clicked()
{
    if(que->exec("drop table if exists rb_tab1;"))
        ui->textEdit->append("drop table sucess");
    else
        ui->textEdit->append(que->lastError().text());

    bool t =que->exec("create table if not exists rb_tab1(id integer ,name text,height real);");
    if(!t) ui->textEdit->append(que->lastError().text());
    else ui->textEdit->append("create table rb_tab1 sucess");
}
//insert data
void MainWindow::on_pushButton_clicked()
{
   QString str = QString("insert into rb_tab1 values(10086,'TDM',18.99);");
   if(!que->exec(str)) ui->textEdit->append(que->lastError().text());
   else ui->textEdit->append("insert  rb_tab1 sucess");
}
//select data
void MainWindow::on_pushButton_3_clicked()
{
    QString str = QString("select *from rb_tab1;");
    if(que->exec(str))
    {
        ui->textEdit->append("select *from rb_tab1 sucessful;");
    }
    else
    {
        ui->textEdit->append(que->lastError().text());
    }
    //get [select *from rb_tab1] result
     rec = que->record();
    //return data values count
    int count = rec.count();
    ui->textEdit->append(QString("table data tatol number =%1").arg(count));
    if(count == 3)
    {
        while (que->next()) {
            ui->textEdit->append(QString("id =%1 \t name =%2 \t height =%3").arg(que->value(0).toInt()).arg(que->value(1).toString()).arg(que->value(2).toDouble()));
        }
    }
    else
    {
        while (que->next()) {
            ui->textEdit->append(QString("id =%1 \t name =%2 \t height =%3 \t card_id =%4").
                                 arg(que->value(0).toInt()).arg(que->value(1).toString()).
                                 arg(que->value(2).toDouble()).arg(que->value(3).toString()));
        }
    }
}
//show table values
void MainWindow::on_pushButton_7_clicked()
{
    QString str = QString("select *from rb_tab1;");
    if(que->exec(str))
    {
        ui->textEdit->append("select *from rb_tab1 sucessful;");
    }
    else
    {
        ui->textEdit->append(que->lastError().text());
    }
    //get [select *from rb_tab1] result
     rec = que->record();
    //return data values count
    int count = rec.count();
    if(count == 3)
    {
        ui->textEdit->append(QString("table data tatol number =%1").arg(count));
        while (que->next()) {
            ui->textEdit->append(QString("id =%1 \t name =%2 \t height =%3").arg(que->value(0).toInt()).arg(que->value(1).toString()).arg(que->value(2).toDouble()));
        }
    }
    else if(count == 4)
    {
        ui->textEdit->append(QString("table data tatol number =%1").arg(count));
        while (que->next()) {
            ui->textEdit->append(QString("id =%1 \t name =%2 \t height =%3 \t char_id = %4").arg(que->value(0).toInt()).arg
                                 (que->value(1).toString()).arg(que->value(2).toDouble()).arg(que->value(3).toString()));
        }
    }
}
//update table values
void MainWindow::on_pushButton_4_clicked()
{
    int ret =que->exec("update rb_tab1 set id =200,name = 'NMD',height = 23.55;");
    if(ret)
    {
        ui->textEdit->append("update table value sucessful");
    }
    else
    {
        ui->textEdit->append(que->lastError().text());
    }
    QString str = QString("select *from rb_tab1;");
    if(que->exec(str))
    {
        ui->textEdit->append("select *from rb_tab1 sucessful;");
    }
    else
    {
        ui->textEdit->append(que->lastError().text());
    }
    //get [select *from rb_tab1] result
     rec = que->record();
    //return data values count
    int count = rec.count();
    if(count == 4)
    {
        int ret =que->exec("update rb_tab1 set id =200,name = 'NMD',height = 23.55,card_id = '222222';");
        if(ret)
        {
            ui->textEdit->append("update table value sucessful");
        }
        else
        {
            ui->textEdit->append(que->lastError().text());
        }
    }
}
//add new column
void MainWindow::on_pushButton_5_clicked()
{
    int ret =que->exec("alter table rb_tab1 add card_id char(18);");
    if(ret)
    {
        ui->textEdit->append("alter table rb_tab1 add card_id char(18)");
    }
    else
    {
        ui->textEdit->append(que->lastError().text());
    }
}


【5】效果演示

创建数据库
在这里插入图片描述
在此数据库下创建表格
在这里插入图片描述
插入一行 三列 第一行数据 ==
在这里插入图片描述
== 查询刚刚插入的数据

在这里插入图片描述
更新数据 覆盖第一行的所有值
在这里插入图片描述
查询更新后的值
在这里插入图片描述
新增一列
在这里插入图片描述
插入数据 包括新增的列
在这里插入图片描述
在这里插入图片描述
显示所有插入的值
在这里插入图片描述


本次小测试结束



http://www.niftyadmin.cn/n/3825.html

相关文章

Java UML 类图

继承 继承&#xff1a;重用父类的某些功能 缺点&#xff1a;强耦合 耦合&#xff1a;修改一方&#xff0c;会影响另一方 应用&#xff1a;是否需要“向上转型” 接口 行为的抽象、可跨越不同的类 不包含实现实现类需完全实现可实现多个接口 是一种“自顶向下”的设计&…

Java【数组】定义与使用,什么是引用类型你知道吗

文章目录前言一、数组的基本概念1.什么是数组2.数组的创建和初始化1.数组的创建2. 数组的初始化3.数组的使用4.遍历数组&#xff08;两种方式&#xff09;二、数组是引用类型1.初识JVM内存分配2.引用类型3.认识null三、数组的应用场景1.保存数据2.作为方法的参数1.参数传基本数…

C++【string类】

先给大家推荐两个网站用于学习C cplusplus C官网 文章目录一、为什么学习string类1、C语言中的字符串2、两道面试题二、标准库中的string类1、string类对象的常见构造2、string类数据的遍历for循环范围for迭代器3、string类对象的容量操作4、string类对象的访问及遍历操作5、st…

Windows与Linux行尾换行符引发Git的一系列惨案

1 前言 最近在使用 Git 提交代码的时候&#xff0c;老是碰到一段看起来 “没有任何改动” 的代码&#xff0c;被 diff 检测出异常&#xff0c;很是苦恼&#xff0c;特别是项目紧急的时候&#xff0c;不敢用 VSCode 编辑了&#xff0c;只能用 vim 进行少量代码的修改、上库。 …

C.打牌的贝贝(卡特兰数)

C.打牌的贝贝(卡特兰数) 后手赢的条件是 先手的每张票都都可以出一张更大的。 可以转成括号序列&#xff0c;先手的牌是左括号&#xff0c;后手的牌是右括号&#xff0c;只要是合法的括号序列后手就赢。因此后手的答案就是卡特兰数h(n)C2nnn1h(n)\dfrac{C_{2n}^n}{n1}h(n)n1C…

HTML5+css3课后习题【二】

文章目录&#x1f341;第5章 盒子模型&#x1f341;&#x1fab6;一 判断题&#x1fab6;&#x1f98b;二 选择题&#x1f98b;&#x1fab3;三 简答题&#x1fab3;&#x1f7e9;第6章 列表和超链接&#x1f7e9;&#x1f7e8;一 判断题&#x1f7e8;&#x1f7e5;二 选择题&a…

QT_Socket_tcp通信

文章目录一、项目介绍二、程序设计1. Server2. Client三、Ui界面1. Server2. Client四、程序源码一、项目介绍 本篇为基于QT下的Socket编程&#xff0c;其首要部分为QT基础&#xff0c;不懂的可以返回我主页查看 “ QT分栏 ” 的相关文章&#xff0c;其次为Socket编程和TCP通信…

【论文阅读】EDPLVO: Efficient Direct Point-Line Visual Odometry

一、公式及符号约定 这篇论文是将直接法的残差计算从点扩展到了线段&#xff0c;所以一些符号在第三章的部分提前做了约定。用Π表示投影的函数&#xff0c;也就是用像素坐标和内参矩阵以及深度信息&#xff0c;投影出点的空间坐标&#xff0c;反之Π-1表示的是将空间坐标投影…