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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM