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

⌚Time: 2022-02-19 17:21:46

👨‍💻Author: Jack Ge

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();

}

效果: