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

     最近想玩一下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

     很多时候,结合网上的搜索和官方文档的确可以帮助我们理解很多问题~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值