我正在使用QSqlTableModel
方法从 Qt 应用程序插入/更新数据库表setData
,submitAll
并且commit
。出于日志记录的目的,我需要记录相应的 SQL 语句。我怎样才能做到这一点?(我正在看,QSqlTableModel::query()
但似乎它只返回 SELECT)
这是我正在做的事情的简化版本。
QSqlTableModel *_dataTableModel = qobject_cast<QSqlTableModel*>(dataTableView->model());
_dataTableModel->setData(item, value);
_dataTableModel->database().transaction();
_dataTableModel->submitAll();
_dataTableModel->database().commit()
QSqlQuery _currentQuery = _dataTableModel->query();
qDebug() << _currentQuery.lastQuery();
最后一行总是打印一个 SELECT,即使我进行了更新或插入。
更新
这是一个自给自足的代码片段。设置是,我有一个带有 aQTableView
和QPushButton
. clicked()
在插槽中捕获按钮的信号,并将addNewRow()
任意值插入到第一个单元格。我正在打印lastQuery()
期望它是插入语句的结果,但它是给定表的 SELECT 语句。我究竟做错了什么?
主文件
{
QApplication a(argc, argv);
test1 w;
// connect to and open database
w.setDataTable("MY_TEST_TABLE");
w.show();
return a.exec();
}
测试1.h
public:
void setDataTable(QString dataTableName);
private slots:
void addNewRow();
测试1.cpp
void test1::setDataTable( QString dataTableName )
{
QSqlTableModel *tableModel = new QSqlTableModel();
tableModel->setTable(dataTableName);
tableModel->select();
ui.tableView->setModel(tableModel);
}
void test1::addNewRow()
{
QSqlTableModel *tableModel = qobject_cast<QSqlTableModel*>(ui.tableView->model());
if(!tableModel->insertRow(tableModel->rowCount())) {
return;
}
tableModel->setData(tableModel->index(0, 0), QVariant("123345"));
tableModel->database().transaction();
if(!tableModel->submitAll()) {
return;
}
if (!tableModel->database().commit()) {
return;
}
qDebug() << tableModel->query().lastQuery();
}