当前位置:   article > 正文

第十二章:Qt数据库(sqlite)_qsqlite

qsqlite

回顾:
第一章:Qt的概述
第二章:在Ubuntu编写第一个Qt程序
第三章:Qt的字符串和字符编码
第四章:Qt的信号和槽
第五章:Qt容器窗口(父窗口)
第六章:面向对象的Qt编程
第七章:Qt设计师使用(designer)
第八章:Qt创造器的使用(qtcreator)
第九章:资源和图像
第十章:目录与定时器
第十一章:鼠标和键盘事件

Qt数据库(sqlite)

1、数据库简介//了解

  • 1)概念:数据库是指以一定方式存储在一起,能为多个用户共享,具有仅能小的冗余度的特性,是与应用程序彼此独立的数据集合。
  • 2)数据库相关的术语
    • DB 数据库
    • DBA 数据库管理员
    • DBMS 数据库管理系统
    • RDB 关系型数据库
    • RDBMS 关系型数据管理系统
  • 3)数据库类型
    • 层次式数据库
    • 网络式数据库
    • 关系型数据库
  • 4)常见数据库
    • Oracle,市场占有率50%
    • IBM的DB2,市场占有率20%
    • 微软的SqlServer,市场占有率15%
    • Sun公司的MySQL
    • SQLite,轻量级嵌入式数据库
  • 5)数据库查询语言(SQL)

2、SQLite数据库

2.1、安装SQLite
  • 在线安装(推荐): sudo apt-get install sqlite3
  • 离线安装:sudo dpkg -i sqlite.xx.deb
  • 测试:在终端输入sqlite3,即可进入sqlite的命令操作界面
    在这里插入图片描述
    使用.exit可以退出控制终端
    注:sqlite3命令行界面可以输入两种指令,一种是sqlite自身的配置和格式控制等相关指令,以"."开头,可以使用".help" 查看这些指令的详细说明;还有一种是SQL指令,实现对数据的增删改查等相关操作。
2.2、常见的sqlite指令
  • 1).database 查看数据库名字和对应的文件
  • 2).tables查看当前数据库包含的数据表
  • 3).schema 查看创建数据表的信息
  • 4).mode 显示模式,设置数据显示模式(list/tabs/column)
  • 5).nullvalue "string" 设置空白位置显示的字符串
  • 6).backuo 文件名,备份数据库到指定的文件中
  • 7).exit/.quit 退出
    注:
    • ctrl+L可以清屏
    • SELECT * FROM company;//查看company中全部内容

3、在命令行使用sql命令操作数据库//重点

  • 1)创建数据表,语法:
CREATE TABLE 表名(
	列名1 类型 约束,
	列名2 类型 约束,
	...
	列名n 类型 约束
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

类型:INT(整型)、TEXT(字符串)、REAL(浮点数)
约束:NOT NULL(非空);UNIQUE(唯一);PRIMARY KEY(主键),包含唯一性,同时可以加快对数据的访问

  • 2)删除表:
DROP TABLE 表名;
  • 1

注: 慎用,因为数据库表一旦删除,里面包含的数据也将消失

  • 3)插入数据,语法:
INSERT INTO 表名
	(列名1, 列名2, ..., 列名n)
	VALUES (数值1, 数值2, ..,数值n);
  • 1
  • 2
  • 3

eg:

insert into student (id, name, scorc) values (10002, "weeks", 98);
  • 1
  • 4)删除数据,语法:
DELETE FROM 表名 wehere 条件表达式;
  • 1

eg:

delete from student where id=10002;
  • 1
  • 5)修改数据,语法:
UPDATE 表名 SET 列名1=新数值, 列名2=新数值.. WHERE 表达式;
  • 1

eg:

update student set score=100 where id=10001;
  • 1
  • 6)查询操作,语法
SELECT 列名1, 列名, ..., 列名n FROM 表名;
//或者
SELECT 列名1, 列名, ..., 列名n FROM 表名 WHERE 条件表达式;
//或者
SELECT 列名1, 列名, ..., 列名n FROM 表名 WHERE 条件表达式 ORDER BY 列名 排序方式;//排序方式有ASC(升序),DESC(降序)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

eg:

select * from company where salary>=8000 or salary<3000;
  • 1

4、在Qt中使用Sqlite数据库

  • 1)QSqlDatabase:建立Qt程序和数据库的连接
//添加数据库驱动
QSqlDatebase db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库的名字,对于sqlite就是".db"数据文件
db.setDatabase("custom.db");
//打开数据库
bool ok = db.open();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 2)QSqlQuery:提供SQL命令的操作和执行方法
QSqlQuery query;
QString str("str字符串");
query.exec(str);
  • 1
  • 2
  • 3
  • 3)QSqlQueryModel:执行查询的SQL语句和遍历结果集
QSqlQueryModel *model = new QSqlQueryModel;
//执行select语句并保存结果集到model
model->setQuery("SELECT 语句");
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

//显示结果QTableView
QTableView *view = new QTableView;
view->setModel(model);
view->show();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

案例:学上成绩管理系统

  • SqliteDialog.h
#ifndef SQLITEDIALOG_H
#define SQLITEDIALOG_H

#include <QDialog>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class SqliteDialog; }
QT_END_NAMESPACE

class SqliteDialog : public QDialog
{
    Q_OBJECT

public:
    SqliteDialog(QWidget *parent = nullptr);
    ~SqliteDialog();
private:
    //
    void createDB(void);
    //
    void createTable(void);
    //
    void queryTable(void);

private slots:
    void on_sortButton_clicked();

    void on_insertButton_clicked();

    void on_deleteButton_clicked();

    void on_updateButton_clicked();

private:
    Ui::SqliteDialog *ui;
    QSqlDatabase db;//
    QSqlQueryModel model;//
};
#endif // SQLITEDIALOG_H

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • SqliteDialog.cpp
#include "SqliteDialog.h"
#include "ui_SqliteDialog.h"

SqliteDialog::SqliteDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::SqliteDialog)
{
    ui->setupUi(this);
    createDB();
    createTable();
    queryTable();
}

SqliteDialog::~SqliteDialog()
{
    delete ui;
}

// sort slot
void SqliteDialog::on_sortButton_clicked()
{
    QString value = ui->valueCombox->currentText();
    QString com = ui->condCombox->currentText();
    QString str = QString(
                "SELECT * FROM student"
                "ORDER BY %1 %2").arg(value).arg(com);
    model.setQuery(str);
    //show result
    ui->tableView->setModel(&model);
}
//insert slot
void SqliteDialog::on_insertButton_clicked()
{
    QSqlQuery query;
    //get id,name, score
    int id = ui->idEdit->text().toInt();
    QString name = ui->nameEdit->text();
    double score = ui->scoreEdit->text().toDouble();
    QString str = QString(
                "INSERT INTO student"
                "(id, name, score)"
                "VALUES (%1,'%2',%3)"
                ).arg(id).arg(name).arg(score);
    query.exec(str);
    queryTable();
}
//delete slot
void SqliteDialog::on_deleteButton_clicked()
{
    QSqlQuery query;
    //get id
    int id = ui->idEdit->text().toInt();
    QString str = QString(
                "DELETE FROM student WHERE id=(%1)").arg(id);
    query.exec(str);
    queryTable();
}
//update slot
void SqliteDialog::on_updateButton_clicked()
{
    QSqlQuery query;
    //get id
    int id = ui->idEdit->text().toInt();
    double score = ui->scoreEdit->text().toDouble();
    QString str = QString(
                "UPDATE student SET score=(%1) WHERE id=(%2)").arg(score).arg(id);
    query.exec(str);
    queryTable();
}

//creat databas
void SqliteDialog::createDB(void)
{
    //create connect wit sqlite database
    //1)add database drive
    db = QSqlDatabase::addDatabase("QSQLITE");
    //2)database's name
    db.setDatabaseName("menu.db");
    //3)open database
    if(db.open()==false){
        qDebug() << db.lastError();
    }
}

//create data table
void SqliteDialog::createTable(void)
{
    QSqlQuery query;
    QString str = QString(
                "CREATE TABLE student ("
                " id INT PRIMARY KEY,"
                "name TEXT NOT NULL,"
                "score REAL NOT NULL)");
    //"abc""bcd"==>"abcbcd"
    //qDebug() << str;
    query.exec(str);
}

//query table data
void SqliteDialog::queryTable(void)
{
    QString str = QString("SELECT * FROM student");
    //execute str corresponding sql and save result
    model.setQuery(str);
    //show result
    ui->tableView->setModel(&model);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/866837
推荐阅读
相关标签
  

闽ICP备14008679号