+ -
当前位置:首页 → 问答吧 → 用linux c++如何保证commit成功提交事务??在线等高手解决!

用linux c++如何保证commit成功提交事务??在线等高手解决!

时间:2011-09-27

来源:互联网

我用的是linux oci编程,调用commit()时有时提交不成功事务,弄得没有保存到磁盘数据文件,造成数据丢失。请问如何保证成功提交事务到数据文件里。谢谢!!

作者: garping   发布时间: 2011-09-27

你的COMMIT是提交到数据库里?还是写到数据文件里?
你用的COMMIT是OCI自带的COMMIT方法么?那应该是提交到数据库里的。
不能完全保证事务成功提交到数据库里,只能在每次COMMIT时,进行判断。
如果提交没有成功,记错误日志。

作者: yixilan   发布时间: 2011-09-27

当然指的是写到数据文件里啦。
我用的是OCI自带的COMMIT方法,请问如何判断每次commit返回参数,请列出具体代码看看,谢谢!

作者: garping   发布时间: 2011-09-27

咱俩用的不一样。不过,你有没有什么使用手册之类的,可以查一下。
我用的是提交数据库的OCITransCommit方法,不是直接的commit
对于OCITransCommit方法,返回值有如下:
OCI_SUCCESS,OCI_SUCCESS_WITH_INFO,OCI_NEED_DATA,OCI_NO_DATA之类的;

你可以查查你的commit方法有哪些返回参数。

作者: yixilan   发布时间: 2011-09-27

Stmt = Conn->createStatement();
Stmt->setSQL(strsql);
count=Stmt->executeUpdate();
Conn->commit();
Conn->terminateStatement(Stmt);

请问OCITransCommit()可以替换为commit()吗?

作者: garping   发布时间: 2011-09-27

能不能替换我也不知道啊。没看到你所有的源程序。
另外,你这里的commit不是OCI自己的方法,你不是通过一个类对象Conn来调用的嘛?
你的commit是类Conn里封装的一个方法。
你得深入到类Conn里仔细看了。
我估计哈,这个类Conn->commit()方法里,实际上调用的还是OCITransCommit()
呵呵,你自己找找吧。

作者: yixilan   发布时间: 2011-09-27

Environment *Env;
Connection *Conn;
Statement *Stmt;
Env = Environment::createEnvironment(Environment::OBJECT);
Conn = Env->createConnection(user, pwd, strconn_string);
Stmt = Conn->createStatement();
Stmt->setSQL(strsql);
count=Stmt->executeUpdate();
Conn->commit();
Conn->terminateStatement(Stmt);
以上就是源程序的主要代码,就这么简单

作者: garping   发布时间: 2011-09-27