您的位置:首页 > 数据库 > Oracle

NodeJs oracledb无法完成删除数据项操作的处理方法

2015-12-16 19:55 621 查看
最近想玩一下nodejs,出于对oracle 的兴趣,我就选择了连接Oracle数据库,相应的工具就是oracledb这个开源库了,具体的安装方法很复杂,我的资源里面有相应的教学视频,这里就不再赘述了,今天要说的是一个利用nodejs无法删除oracle数据项的问题。

我一开始写的删除代码是这样的:

DataBase.prototype.deleteinfo=function(sdelete,callback){
oracledb.getConnection(
{
user          : dbConfig.user,
password      : dbConfig.password,
connectString : dbConfig.connectString
},
function(err, connection)
{
if (err) {
console.error(err.message);
return;
}
connection.execute(
sdelete,
[],
function(err, result)
{
if (err) {
console.error(err.message);
doRelease(connection);
return;
}
console.log(result.rowsAffected);
doRelease(connection);
callback();
});
});
}
function doRelease(connection)
{
connection.release(
function(err) {
if (err) {
console.error(err.message);
}
});
}
每次执行删除语句之后打印出了影响的行数为1,但是,查看数据库,这一项就是没有被删除,于是去看下载的库里面自带的例子,而奇怪的是,例子里面恰巧没有delete语句。由于我也是刚接触oracledb,带着疑问我又查找了一番,

终于发现了问题的所在,就是加上一句话:{autoCommit:true}这样就好了。代码改正如下:

DataBase.prototype.deleteinfo=function(sdelete,callback){
oracledb.getConnection(
{
user          : dbConfig.user,
password      : dbConfig.password,
connectString : dbConfig.connectString
},
function(err, connection)
{
if (err) {
console.error(err.message);
return;
}
connection.execute(
sdelete,
[],<span style="color:#FF0000;">{autoCommit:true},</span>
function(err, result)
{
if (err) {
console.error(err.message);
doRelease(connection);
return;
}
console.log(result.rowsAffected);
doRelease(connection);
callback();
});
});
}
就是加上红色的部分就好了。可是为什么这样呢?

原来这个数据库的事务(Transaction)处理有关,我的理解就是每当我们使用oracledb改动数据库的时候都是在一个处理的事务中,当你完成一个事物之后是需要commit的,不然,执行完之后,数据还是会回滚到最初状态,所以,为什么删除不掉的原因就是:我们在一个删除的事务中,执行代码的过程中,数据的确被删除了,但是,事务结束之前没有被提交(commit)所以,结束事务之后,数据库又回滚到之前的状态了(也就是没删除之前的状态)。所以,我就是一直删除不掉。

那个autoCommit:true的意思就是sql语句完成之后会自动提交事务,所以当加上这句话之后,我们删除操作就没有回滚,结果就是数据项被删除了。查找了oracledb的官方api之后发现oracledb的提交事务恰巧是false。

这里是api的说法:



这里是官方文档的连接 :https://github.com/oracle/node-oracledb/blob/master/doc/api.md#propdbisautocommit

很多时候,结合网上的搜索和官方文档的确可以帮助我们理解很多问题~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: