【问题标题】:node.js sqlite3 - error when adding rows dynamicallynode.js sqlite3 - 动态添加行时出错
【发布时间】:2015-10-01 12:42:47
【问题描述】:

当我通过 for 循环向表中添加 20 个字符串时会发生此错误:

ERROR: SQLITE_ERROR: cannot start a transaction in an transaction at Error (native)

以下是相关代码:

var sqlite3 = require('sqlite3').verbose();
var Players_db = new sqlite3.Database('./db/Players');

Players_db.serialize(function() 
{
    Players_db.run("BEGIN TRANSACTION");
    Players_db.run("CREATE TABLE IF NOT EXISTS Players(string TEXT)");
    Players_db.run("COMMIT");
    console.log('Players_db init')
});

// This part is a simplification, but it shouldn't make a difference.
for (var i = 0; i < 20; i ++) 
{
    Players_db.run("BEGIN TRANSACTION");
    Players_db.run("INSERT INTO Players VALUES('"+a_string+"')");
    Players_db.run("COMMIT");
}

似乎for循环成功完成(并且数据正在附加到数据库中),但不久之后它会因上述错误而崩溃。

【问题讨论】:

    标签: javascript node.js sqlite transactions sql-insert


    【解决方案1】:

    试试这个

            Players_db.serialize(function() 
            {
                Players_db.run("BEGIN TRANSACTION");
                for (var i = 0; i < 20; i ++) 
                {
                   Players_db.run("INSERT INTO Players VALUES('"+a_string+"')");
                }
                Players_db.run("COMMIT");
            })
    

    【讨论】:

    • 它可以工作,但由于应用程序的性质,我无法从同一个序列化事件中添加行。
    • 我发现我可以为每个新行使用序列化函数。谢谢1
    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 2021-09-25
    相关资源
    最近更新 更多