QT访问sqlite3数据库

项目上需要写一个简单地配置工具,主要是操作数据库的,MFC我不会,那就用qt上吧

一.测试数据库驱动

首先添加sql模块

在这里插入图片描述

检查qt支持的数据库驱动

QT访问sqlite3数据库_第1张图片

QSQLITE就是指支持sqlite3,没有的话就得先编译对应的驱动

二.打开数据库

    db.setDatabaseName("数据库名字.db");
    if(db.open())
        qDebug() << "database open success" << endl;
显示:

在这里插入图片描述

说明成功了,注意,如果不存在这个数据库文件,那么会创建一个新的

三.创建新的表格

我们来创建一个表的PEOPLE表格,里面有NAME, ID, PHONE, CITY, EMAIL
 QSqlQuery q(db);
    QString Str = "CREATE TABLE PEOPLE \
                    (                                       \
                      Name         char(10)  NOT NULL ,     \
                      ID           char(50)  NOT NULL ,     \
                      Phone        char(50)  NULL ,         \
                      City         char(50)  NULL ,         \
                      Email        char(5)   NULL          \
                    );";


    if(q.exec(Str))
        qDebug() << "Create ok" << endl;
    else
        qDebug() << "Create fail: " << q.lastError();
使用sqlite expert查看数据库,看看创建表成功了没

QT访问sqlite3数据库_第2张图片

看样子是成功了

四.插入数据

在新建的表格中插入10条数据
 	QSqlQuery q(db);
    const char* format = "insert into PEOPLE values('name%d', '123%d', '101010%d', 'City%02d', '1111%d@email')";
    QString str = "";
    for(int i = 0; i < 10; i++)
    {
        str = "";
        str.sprintf(format, i, i, i, i, i);
        if(q.exec(str))
            qDebug() << "insert ok" << endl;
        else {
            qDebug() << "insert fail" << endl;
        }
    }

QT访问sqlite3数据库_第3张图片

插入成功

五.访问数据库信息

访问数据库中某张表
 QSqlQuery q(db);
    if(q.exec("Select 要查询的字段名 From 表名"))
        qDebug() << "select ok";
    else {
        qDebug() << "select fail";
    }
    while(q.next())
    {
        qDebug() << q.value(0).toString();
    }

六.使用tableview显示数据库信息

使用Tableview显示数据库的信息
可以使用代码创建tableview,也可以使用ui 设计直接拖进去,这里借助 QSqlRelationalTableModel

用代码:

	QSqlRelationalTableModel* model = new QSqlRelationalTableModel(this, db);
    model->setTable("PEOPLE");
    model->select();
    QTableView* view = new QTableView(this);
    view->resize(600, 200);
    view->setModel(model);

QT访问sqlite3数据库_第4张图片

用Designer插入比较方便,直接拖进去就可以了,比较方便,推荐。
显示效果没什么问题,如果想设置在这个表直接修改即时生效,那么添加一下代码
model->setEditStrategy(QSqlTableModel::OnFieldChange);
这样就可以双击修改想修改的项了

七.显示表中一部分字段

如果想只显示表中的一部分,比如只显示上面表中的name和ID,那么就需要重写QSqlRelationalTableModel类
头文件:
#ifndef MYMODEL_H
#define MYMODEL_H

#include 
#include 
#include 
class MyModel : public QSqlRelationalTableModel
{
    Q_OBJECT

public:
    explicit MyModel(QSqlDatabase db, QObject *parent = nullptr);
    void selectSome();

private:
    QSqlDatabase m_db;
};

#endif // MYMODEL_H
实现:
#include "mymodel.h"
#include 
MyModel::MyModel(QSqlDatabase db, QObject *parent)
    : QSqlRelationalTableModel(parent, db), m_db(db)
{
}

void MyModel::selectSome()
{
    QSqlQuery qs("SELECT Name, ID FROM PEOPLE", m_db);
    setQuery(qs);
}

调用:
    MyModel* model = new MyModel(db, this);
    model->setTable("PEOPLE");
    model->selectSome();
    QTableView* view = new QTableView(this);
    view->resize(600, 200);
    view->setModel(model);
效果:

QT访问sqlite3数据库_第5张图片

八.修改表头

如果想给表头起个别的名字,可以这个干:
 model->setHeaderData(0, Qt::Horizontal, tr("NewHeader"));//修改第0列的表头
注意:这句话要放在执行完查询语句之后,这里是放在selectsome之后

九.使表格显示的宽度总是和tableview对齐

表格实际显示和tableview对不齐总是很难看,相对齐,添加一下代码:
view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//表格宽度随着tableview的变化而变化

QT访问sqlite3数据库_第6张图片

这样就好看多了啊

十.设置过滤器

如果只想显示存在某个字段的数据,不存在就不想显示,可以这样:
model->setFilter("Phone");//存在某个字段的记录

QT访问sqlite3数据库_第7张图片

红色方框内没有显示

你可能感兴趣的:(数据库,Qt使用)