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