QT <Demo> QTableView Sqllite QSqlTableModel 基本使用

QT <Demo> QTableView Sqllite QSqlTableModel 基本使用


前言

QTableview 使用QSqlTableModel 获取Sqlite 数据内容表格显示

二、SQL 操作封装

1.创建/连接 数据库

代码如下(示例):

/**
 * @brief CSqlProc::linkDataBase  数据连接
 * @param sdataBase 数据库路径
 * @return
 */
QString  CSqlProc::linkDataBase(const QString &sdataBase,QSqlDatabase &dataBase)
{
   QString error;
    if( sdataBase.isEmpty())
    {
        error = " para Empty";
    }
     dataBase= QSqlDatabase::addDatabase("QSQLITE");
      dataBase.setDatabaseName(sdataBase);


    if(!dataBase.open())
    {
        error = dataBase.lastError().text();

    }
    return  error;
}

2.创建数据表

代码如下(示例):

/**
 * @brief CSqlProc::createTable 创建数据表
 * @param sTablePara 表参数
 * @return
 */
QString CSqlProc::createTable(const QString &name , QString key ,const QStringList &sTablePara)
{
    QString error;

    QSqlQuery sqlQuery;

    QString sql = QString("create table %1(%2 int primary key,%3)").arg(name).arg(key).arg(sTablePara.join(" ,"));
    emit sig_curSqlStr(sql);
    if(!sqlQuery.exec(sql))
     {
            error= sqlQuery.lastError().text();
     }
    return  error;
}

3.数据插入

代码如下(示例):

/**
 * @brief CSqlProc::insertData 数据插入
 * @param name
 * @param sTablePara
 * @return
 */
QString CSqlProc::insertData(const QString &name, const QStringList &sTablePara)
{
    QString error;
    QSqlQuery  sqlQuery;
    QString str;
    for(int index = 0; index < sTablePara.size(); ++ index)
    {
        str +=QString("'%1'").arg(sTablePara[index]);
        if(index != sTablePara.size()-1)
        {
            str+=",";
        }
    }
    QString sql = QString("INSERT INTO %1 VALUES(%2)").arg(name).arg(str);
    emit sig_curSqlStr(sql);
    if(!sqlQuery.exec(sql))
    {
        error += sqlQuery.lastError().text()+"\\n";
    }
    return  error;
}

4.数据删除

代码如下(示例):

/**
 * @brief CSqlProc::deleteData 数据删除
 * @param table
 * @param keyColumn
 * @param key
 * @return 
 */
QString CSqlProc::deleteData(const QString &table, const QString  &keyColumn ,const QString &key)
{
    QString error;
    QSqlQuery  sqlQuery;
    QString  sql = QString("DELETE FROM %1 WHERE %2='%3';").arg(table).arg(keyColumn).arg(key);
    emit sig_curSqlStr(sql);
    if(!sqlQuery.exec(sql))
    {
        error= sqlQuery.lastError().text();
    }
    return  error;
}

5.数据修改

代码如下(示例):

/**
 * @brief CSqlProc::editData 数据修改
 * @param table
 * @param mValue
 * @param keyPara
 * @return
 */
QString CSqlProc::editData(const QString &table, QMap<QString ,QString> mValue,QPair<QString,QString> keyPara)
{
    QString error;
    QSqlQuery  sqlQuery;

    auto it = mValue.begin();

    QString set;
    while(it != mValue.end())
    {
        set += QString("%1='%2'").arg(it.key()).arg(it.value());
        auto ittemp = it +1;
        if(ittemp != mValue.end())
        {
            set+=",";
        }
        it++;
    }

    QString sql = QString("UPDATE %1 SET %2  WHERE %3='%4';")
            .arg(table)
            .arg(set)
            .arg(keyPara.first)
            .arg(keyPara.second);

    emit sig_curSqlStr(sql);
    if(!sqlQuery.exec(sql))
    {
        error= sqlQuery.lastError().text();
    }
    return  error;

}

三、QTableView

代码如下(示例):

 _sqlProc = new CSqlProc;
    connect(_sqlProc,&CSqlProc::sig_curSqlStr,this,&MainWindow::slot_updateCurSqlStr);
    QSqlDatabase db;
    QString sMsg = _sqlProc->linkDataBase("test.db",db);
    if(sMsg.isEmpty())
        sMsg = " link Database Success!";
    this->showMsg(sMsg);
    QStringList temp ={"para1" , "para2" , "para3"};
    _sqlProc ->createTable("example1","key",temp);
    _pModel = new QSqlTableModel(this,db);
    _pModel->setTable("example1");
    QStringList tables;
    tables << "id" << "para1" << "para2" << "para3";
    for(int i = 0 ; i < tables.count(); i++)
        _pModel->setHeaderData(i,Qt::Horizontal,tables[i]);
    _pModel->setSort(0,Qt::AscendingOrder);
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    ui->tableView->horizontalHeader()->setStretchLastSection(true);
    ui->tableView->setColumnHidden(0,true);
    ui->tableView->setColumnWidth(1,50);
    ui->tableView->setColumnWidth(2,30);
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tableView->setModel(_pModel);
    _pModel->select();

四、测试

1、 数据库创建

 _sqlProc = new CSqlProc;
    connect(_sqlProc,&CSqlProc::sig_curSqlStr,this,&MainWindow::slot_updateCurSqlStr);
    QSqlDatabase db;
    QString sMsg = _sqlProc->linkDataBase("test.db",db);
    if(sMsg.isEmpty())
        sMsg = " link Database Success!";
    this->showMsg(sMsg);
    QStringList temp ={"para1" , "para2" , "para3"};
    _sqlProc ->createTable("example1","key",temp);

在这里插入图片描述

2、 数据插入

void MainWindow::insertData()
{
    static int index = 1;
    QStringList temp;
    temp<<QString("id_insert_%1").arg(index)
       <<QString("para1_insert_%1").arg(index)
      <<QString("para2_insert_%1").arg(index)
     << QString("para3_insert_%1").arg(index);

    QString error = _sqlProc ->insertData("example1",temp);

    showMsg(error);
    _pModel->select();
    index++;
}

在这里插入图片描述

3、 数据修改

void MainWindow::eidtData()
{

    int  iRow  = ui->tableView->currentIndex().row();
    if(iRow < 0)
    {
        return;
    }

    QString keyValue = ui->tableView->model()->index(iRow,0).data().toString();


    QStringList  headData;

    for(int i=0;i<ui->tableView->model()->columnCount();i++)
        headData<<ui->tableView->model()->headerData(i,Qt::Horizontal).toString();


    QPair<QString ,QString> pairKey;
    pairKey.first ="key";
    pairKey.second = keyValue;

    QMap<QString ,QString > mEditData;
    for (int index = 1; index < headData.size(); ++ index)
    {
        mEditData[headData[index]] =  QString("edit_%1").arg(index);
    }

    QString error = _sqlProc ->editData("example1",mEditData,pairKey);

    showMsg(error);
    _pModel->select();

}

在这里插入图片描述

4、 数据删除

void MainWindow::deleteData()
{
    int  iRow  = ui->tableView->currentIndex().row();
    if(iRow < 0)
    {
        return;
    }

    QString keyValue = ui->tableView->model()->index(iRow,0).data().toString();
    QString error = _sqlProc ->deleteData("example1","key",keyValue);

    showMsg(error);
    _pModel->select();
}

在这里插入图片描述

总结

Demo 工程链接:
https://download.csdn.net/download/jiang173707/19811595?spm=1001.2014.3001.5501

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值