node-sqlite3的事务执行方法

2015年12月28日html

直接传入执行事务的全部SQL语句不可行。node

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

后台处理函数:github

//新增内容
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的内容是:sql

{"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的流程控制函数 post

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

 

 

 

 

 

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语句,不会执行成功。

 

转载于:https://www.cnblogs.com/lswit/p/5082452.html