C++ 为什么我的交易没有回滚? 试试看 { qDebug()添加BindValue(ui->lineEdit_Name->text()); 查询->添加绑定值(ui->lineEdit_ID->text()); 查询->添加绑定值(用户界面->行编辑->文本()
为什么我的交易没有回滚?C++ 为什么我的交易没有回滚? 试试看 { qDebug()添加BindValue(ui->lineEdit_Name->text()); 查询->添加绑定值(ui->lineEdit_ID->text()); 查询->添加绑定值(用户界面->行编辑->文本(),c++,mysql,qt,qt4,C++,Mysql,Qt,Qt4,为什么我的交易没有回滚? 试试看 { qDebug()添加BindValue(ui->lineEdit_Name->text()); 查询->添加绑定值(ui->lineEdit_ID->text()); 查询->添加绑定值(用户界面->行编辑->文本(); 查询->添加绑定值(ui->lineEdit_Quantity->text()); 查询->添加绑定值(prevID); QSqlQuery*query2=新的QSqlQuery(connector.db); 查询2->准备(“更新零件库存
试试看
{
qDebug()添加BindValue(ui->lineEdit_Name->text());
查询->添加绑定值(ui->lineEdit_ID->text());
查询->添加绑定值(用户界面->行编辑->文本();
查询->添加绑定值(ui->lineEdit_Quantity->text());
查询->添加绑定值(prevID);
QSqlQuery*query2=新的QSqlQuery(connector.db);
查询2->准备(“更新零件库存集ID=?其中ID=?”;
query2->addBindValue(ui->lineEdit_ID->text());
query2->addBindValue(prevID);
qDebug()exec())
{
投掷1枚;
}
qDebug()lineEdit_ID->text();
}
捕获(…)
{
qDebug()为什么要提交代码?您确定当前正在处理的查询回滚失败,而不是前一个查询回滚失败(如果这是在循环中进行的,或者是在另一个查询之后完成的)?另外,如果您正在测试和调试,为什么不在调试器中逐步执行代码?或者至少抛出正确的(和不同的!)异常,这样您就可以确切地知道您正在捕获哪些抛出?最后,使用“捕获所有”子句捕获异常时通常被认为是错误的样式或设计错误的标志。我认为代码中的提交将创建一个保存点,这样,如果调用回滚,数据库将更改为我的初始提交。这就是调用所做的。另外,请阅读和。以及更多关于数据库和事务的一般信息。我对此感到困惑回滚和提交。文档似乎没有帮助,这就是为什么我建议您尝试查找和阅读更多关于它如何更一般地工作的信息。Internet上有大量文档,甚至更多的是书籍形式的文档。
try
{
qDebug()<<connector.db.transaction();
QSqlQuery *query=new QSqlQuery(connector.db);
query->prepare("UPDATE partstore SET Name =? ,ID=?,SellingPrice=?, Quantity=? WHERE ID=?");
query->addBindValue(ui->lineEdit_Name->text());
query->addBindValue(ui->lineEdit_ID->text());
query->addBindValue(ui->lineEdit_SP->text());
query->addBindValue(ui->lineEdit_Quantity->text());
query->addBindValue(prevID);
QSqlQuery *query2=new QSqlQuery(connector.db);
query2->prepare("UPDATE partstock SET ID=? WHERE ID=?");
query2->addBindValue(ui->lineEdit_ID->text());
query2->addBindValue(prevID);
qDebug()<< connector.db.commit();
if(!query->exec())
{
throw 1;
}
qDebug()<<"q1executed";
throw 1;
if(!query2->exec())
{
throw 1;
}
qDebug()<<"q2executed";
prevID=ui->lineEdit_ID->text();
ID=ui->lineEdit_ID->text();
}
catch (...)
{
qDebug()<<"Executrion failed";
qDebug() <<connector.db.rollback();
}