MySql Connector/C++8事务处理Demo


#include <iostream>
#include <exception>
#include <vector>
#include <unistd.h>


#include <mysqlx/xdevapi.h>


#define D_USER  "root"
#define D_PWD   "mysql"
#define D_HOST  "localhost"
#define D_PORT  33060
#define D_DB    "D_COMPANY"


using std::cout;
using std::endl;


int main(void)
try 
{
        //创建会话
    mysqlx::Session sess(
                mysqlx::SessionOption::USER, D_USER,
                mysqlx::SessionOption::PWD, D_PWD,
                mysqlx::SessionOption::HOST, D_HOST,
                mysqlx::SessionOption::PORT, D_PORT,
                mysqlx::SessionOption::DB, D_DB,
                mysqlx::SessionOption::SSL_MODE, mysqlx::SSLMode::DISABLED
            );

        //打开事务,之后的DDL或DML操作都要手动提交或回滚
    cout << ">> turn on transaction." << endl;
    sess.startTransaction();

        //存储保存点
    std::vector<std::string> savepoints;


    cout << ">> insert into t_dept." << endl;
    savepoints.emplace_back(sess.setSavepoint()); //设置保存点
    mysqlx::SqlStatement stmt = sess.sql("INSERT INTO T_DEPT VALUES(?, ?, ?)");
    stmt.bind(40, "OPERATIONS", "BOSTON");
    stmt.execute();

    cout << ">> insert into t_dept." << endl;
    savepoints.emplace_back(sess.setSavepoint());
    stmt = sess.sql("INSERT INTO T_DEPT VALUES(?, ?, ?)");
    stmt.bind(50, "ENGINEER", "BeiJing");
    stmt.execute();

    cout << ">> delete from t_dept." << endl;
    savepoints.emplace_back(sess.setSavepoint());
    mysqlx::SqlResult rset = sess.sql("DELETE FROM T_DEPT WHERE DEPTNO=40").execute();


    for(std::string str : savepoints) {
        cout << str << endl;
    }

    sess.rollbackTo(savepoints.at(2)); //回滚到指定保存点
    sess.commit(); //提到事务
    sess.close(); //关闭会话

    cout << "Done!" << endl;
}
catch (mysqlx::Error &err) 
{
    cout << "ERROR : " << err << endl;
    return -1;
}

转载于:https://www.cnblogs.com/Focus-Flying/p/9316626.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值