qt实现sqlite数据库的简单使用

362 阅读1分钟

qt实现sql操作,首先在项目文件中加入

QT+=sql

需要的头文件

#include<QDebug>
#include<QDir>
#include<QtSql/QSqlDatabase>
#include<QtSql/QSqlError>
#include<QtSql/QSqlTableModel>
#include<QtSql/QSqlQuery>

mainwindow.h中定义变量,用于数据库操作

    QSqlDatabase db;
    QSqlTableModel *model;
    int currentSelectRow;

定义数据库初始化函数

bool MainWindow::initDB(){
    //加载sqlite驱动
    if(QSqlDatabase::contains("qt_sql_default_connection")){
        db=QSqlDatabase::database("qt_sql_default_connection");
    }else{
        db=QSqlDatabase::addDatabase("QSQLITE");
    }
    //判断数据库文件是否存在
    bool dbFile = QFile::exists(QDir::currentPath()+"/mydb.db");
    //打开数据库,如果数据库文件不存在会自动建立
    db.setDatabaseName(QDir::currentPath()+"/mydb.db");
    if(!db.open()){
        qDebug()<<"database open error!"<<db.lastError();
        return false;
    }
    QSqlQuery query(db);
    //如果未创建过数据库文件,则建立新表
    if(!dbFile){
        query.exec("CREATE TABLE table_1 ("
                   "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                   "name text, "
                   "age integer)"
                   );
    }

    model=new QSqlTableModel();
    model->setTable("table_1");
    model->select();
    ui->tableView->setModel(model);
    //设置表不可编辑
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}

main函数中引用

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.initDB();
    return a.exec();
}

在ui编辑器中设计图形界面 在这里插入图片描述

选中当前单元格所在的行,并且显示所选数据

void MainWindow::on_tableView_clicked(const QModelIndex &index)
{
    currentSelectRow=ui->tableView->currentIndex().row();
    ui->tableView->selectRow(currentSelectRow);
    //显示选择的数据
    ui->lineEdit->setText(model->data(model->index(currentSelectRow,0)).toString());
    ui->lineEdit_2->setText(model->data(model->index(currentSelectRow,1)).toString());
    ui->lineEdit_3->setText(model->data(model->index(currentSelectRow,2)).toString());

}

定义增加按钮的回调函数,实现数据增加操作

void MainWindow::on_pushButton_2_clicked()
{
    int rowNum=model->rowCount();
    model->insertRow(rowNum);
    model->setData(model->index(rowNum,1),ui->lineEdit_2->text());
    model->setData(model->index(rowNum,2),ui->lineEdit_3->text());

    model->submitAll();
    model->select();
}

定义删除按钮的回调函数,实现数据删除

void MainWindow::on_pushButton_3_clicked()
{
    model->removeRow(currentSelectRow);
    model->submitAll();
    model->select();
}

定义修改按钮的回调函数,实现数据修改

void MainWindow::on_pushButton_4_clicked()
{
    model->setData(model->index(currentSelectRow,1),ui->lineEdit_2->text());
    model->setData(model->index(currentSelectRow,2),ui->lineEdit_3->text());
    model->submitAll();
    model->select();
}

定义查询按钮的回调函数,实现对name的模糊查询

void MainWindow::on_pushButton_clicked()
{
    if(ui->lineEdit_4->text().isEmpty())
    {
        model->setFilter("");
    }else{
        QString str(ui->lineEdit_4->text());
        model->setFilter("name like '%"+str+"%'");
    }
    model->select();
}

效果: 在这里插入图片描述