• node-sqlite3的事务执行方法


    2015年12月28日

    直接传入执行事务的所有SQL语句不可行。

    上午不知道为什么,使用navicat直接执行sql语句的时候,运行事务都不会成功。下午运行成功了,遂放心开始使用node.js开始编程。

    后台处理函数:

    //新增内容
    function addTableInfo(res, data) {
        var data = JSON.parse(data);
        var sql = '';
        var returnMsg = '';
        rowSql = 'INSERT INTO ' + data.tableName + ' ' + data.tableRows + ' VALUES ';
        db.serialize(function() {
            db.run('BEGIN TRANSACTION;');
            for(var i = 0; i < data.vals.length; i++) {
                sql = rowSql + data.vals[i] + '; ';
                console.log(sql); 
                var k = 0;
                db.run(sql, function(err, rows) {
                    if(!err) {
                        k++;
                        //当所有的回调都执行完成时,返回错误
                        if(k == (data.vals.length)) {
                            console.log('returnMsg返回错误' + returnMsg);
                            if(returnMsg) {
                                res.end(returnMsg);
                            } else {
                                res.end('新增成功!');
                            };
                            
                        };
                    } else {
                        returnMsg = returnMsg + '【数据:' + data.vals[k] + '新增失败,' + err + '】';
                        k++;
                        if(k == (data.vals.length)) {     
                            if(returnMsg) {
                                console.log('returnMsg返回错误:' + returnMsg);
                                res.end(returnMsg);
                            } else {
                                res.end('新增成功!');
                            };
                        };
                    };    
                });
            };       
            db.run('COMMIT TRANSACTION;');
        });  
    };

    如果data的内容是:

    {"tableName":"eqpt_info","tableRows":"(eqpt_code, eqpt_name, eqpt_ty
    pe, eqpt_address, create_time)","vals":["(1,2,2,2,2)","(1,3,2,2,2,)","(1,4,2,2,2
    )","(1,5,2,2,2,4)"]}

    那么返回的returnMsg数据是:

    returnMsg返回错误【数据:(1,3,2,2,2,)新增失败,Error: SQLITE_ERROR: near ")": sy
    ntax error】【数据:(1,5,2,2,2,4)新增失败,Error: SQLITE_ERROR: 6 values for 5 c
    olumns】

    需要使用node-sqlite3的流程控制函数 

    也从别人写的IOS的sqlite3事务执行方法中得到了灵感。

    sqlite3的事务执行方法和其它的数据库不太相同。

    使用sqlite3的事务的时候,直接传入:

    BEGIN TRANSACTION;
    INSERT INTO eqpt_info (eqpt_code, eqpt_name, eqpt_type, eqpt_address, create_time) VALUES (1,2,2,2,2);
    INSERT INTO eqpt_info (eqpt_code, eqpt_name, eqpt_type, eqpt_address, create_time) VALUES (1,2,2,2,2);
    INSERT INTO eqpt_info (eqpt_code, eqpt_name, eqpt_type, eqpt_address, create_time) VALUES (1,2,2,2,2);
    INSERT INTO eqpt_info (eqpt_code, eqpt_name, eqpt_type, eqpt_address, create_time) VALUES (1,2,2,2,2); 
    COMMIT TRANSACTION;

    这样的SQL语句,不会执行成功。

  • 相关阅读:
    OC MRC之循环引用问题(代码分析)
    OC MRC之 @property参数(代码分析)
    OC MRC之set方法内存管理(代码分析)
    OC MRC之多对象之间管理(代码分析)
    OC MRC之计数器的基本操作(代码分析)
    最流行的android组件大全
    Android主题切换方案总结
    Picasso – Android系统的图片下载和缓存类库
    Android无法导入下载好的项目(和Eclipse中已经存在的项目命名一样导致冲突)解决办法
    Android Studio 简单设置
  • 原文地址:https://www.cnblogs.com/lswit/p/5082452.html
Copyright © 2020-2023  润新知