QT 数据库操作

时间:2021-07-25 02:44:57
在QT中如果进行数据库操作,在执行数据库操作那行代码之后,系统会立即将数据写入数据库吗?还是会过一段时间才进行真正的读写?

怎么才能让它立即就将数据真正的写到数据库中

12 个解决方案

#1



例如
QSqlQuery query;
query.prepare(“insert into student (id, name) ”
“values (:id, :name)”);
query.bindValue(0, 5);
query.exec();
应该是在执行query.exec()将数据写入的

#2


但是在执行完此语句后,机器没电,居然没有写入成功?

#3


确定没有进行事物处理。

#4


数据量太大也需要时间处理的

#5


只是一个简单的写操作,而且数据量不大

#6


QT中有类似Linux中sync功能的函数,用于进行缓存清楚吗

#7


引用 1 楼 a549934338 的回复:
例如
QSqlQuery query;
query.prepare(“insert into student (id, name) ”
“values (:id, :name)”);
query.bindValue(0, 5);
query.exec();
应该是在执行query.exec()将数据写入的


这样不行吗?应该可以吧

#8


QSqlTableModel与数据库之间的更新策略
model->setEditStrategy(策略);
策略:
(1)QSqlTableModel::OnFieldChang
   对model的任何更改将立即更新到数据库
(2)QSqlTableModel::OnRowChange(默认策略)
   对model某行的更改,将会在用户选择另外一行时更新到数据库
(3)QSqlTableModel::OnManualSubmit
   对model的更改不会立即更新到数据库,直到用户调用submitAll() 或revertAll()函数。
submitAll()表示提交所有待定的操作。
revertAll()表示恢复/撤销所有待定的操作。

你说的是不是对每行数据操作之后、是否更新了数据库?

#9


如果是非文件型的数据库,会产生这个问题,但这不是Qt的原因,是数据库引擎的排队原因。
Oracle, SQLServer2005 以上都有这个功能。

#10


八楼的说的说的对,我问的就是这个

#11


引用 8 楼 a1213125967 的回复:
QSqlTableModel与数据库之间的更新策略
model->setEditStrategy(策略);
策略:
(1)QSqlTableModel::OnFieldChang
   对model的任何更改将立即更新到数据库
(2)QSqlTableModel::OnRowChange(默认策略)
   对model某行的更改,将会在用户选择另外一行时更新到……


query.exec()这个之后,会立即更新数据库吗?根据八楼说的可能更新也可能不更新

#12


QSqlTabelModel模型可以将所有修改先保存到model中,只有当执行事务操作的commit()后,才会真正写入数据库。

#1



例如
QSqlQuery query;
query.prepare(“insert into student (id, name) ”
“values (:id, :name)”);
query.bindValue(0, 5);
query.exec();
应该是在执行query.exec()将数据写入的

#2


但是在执行完此语句后,机器没电,居然没有写入成功?

#3


确定没有进行事物处理。

#4


数据量太大也需要时间处理的

#5


只是一个简单的写操作,而且数据量不大

#6


QT中有类似Linux中sync功能的函数,用于进行缓存清楚吗

#7


引用 1 楼 a549934338 的回复:
例如
QSqlQuery query;
query.prepare(“insert into student (id, name) ”
“values (:id, :name)”);
query.bindValue(0, 5);
query.exec();
应该是在执行query.exec()将数据写入的


这样不行吗?应该可以吧

#8


QSqlTableModel与数据库之间的更新策略
model->setEditStrategy(策略);
策略:
(1)QSqlTableModel::OnFieldChang
   对model的任何更改将立即更新到数据库
(2)QSqlTableModel::OnRowChange(默认策略)
   对model某行的更改,将会在用户选择另外一行时更新到数据库
(3)QSqlTableModel::OnManualSubmit
   对model的更改不会立即更新到数据库,直到用户调用submitAll() 或revertAll()函数。
submitAll()表示提交所有待定的操作。
revertAll()表示恢复/撤销所有待定的操作。

你说的是不是对每行数据操作之后、是否更新了数据库?

#9


如果是非文件型的数据库,会产生这个问题,但这不是Qt的原因,是数据库引擎的排队原因。
Oracle, SQLServer2005 以上都有这个功能。

#10


八楼的说的说的对,我问的就是这个

#11


引用 8 楼 a1213125967 的回复:
QSqlTableModel与数据库之间的更新策略
model->setEditStrategy(策略);
策略:
(1)QSqlTableModel::OnFieldChang
   对model的任何更改将立即更新到数据库
(2)QSqlTableModel::OnRowChange(默认策略)
   对model某行的更改,将会在用户选择另外一行时更新到……


query.exec()这个之后,会立即更新数据库吗?根据八楼说的可能更新也可能不更新

#12


QSqlTabelModel模型可以将所有修改先保存到model中,只有当执行事务操作的commit()后,才会真正写入数据库。