【发布时间】:2015-04-29 08:23:54
【问题描述】:
我已经得到了上面提到的:在我的数据库初始化过程“SQLITE_ERROR无法启动事务中的交易”的错误,但没有发现存在对最佳实践的一些建议:here和here
所以,我调整我的代码添加db.run(“BEGIN”)和db.run(“凯明”)书挡,希望能够解决这个问题,但错误依然存在。 P>
我的代码如下所示:
我所说的各种初始化功能:
intializeMyTable1(...);
intializeMyTable2(...);
...
intializeMyTableN(...);
每个intialize功能大致相同:
initializeMyTable1: function(...){
...
db.run("BEGIN")
db.run("CREATE TABLE if not exists MyTable1 (...)", function (err) {
if (err !== null) {
logger.error("Database Error:" + err);
}
else {
for (var i = 0; i < SomeNumber; i++) {
db.run("INSERT INTO MyTable1 (...) VALUES (...)", function (err) {
if (err !== null) {
...
}
});
}
}
});
db.run("COMMIT");
...
}
我试图db.run( “END”)代替db.run的( “COMMIT”) - 相同的错误 P>
我所做的发现是,如果我在一个时间只运行的初始化功能之一,我不明白的错误,但如果我链中的初始化功能,运行他们一前一后,我得到的错误。
任何想法/建议理解! P>
EDITS:次要错字修复 P>
【问题讨论】:
-
我不知道的NodeJS。可是你的函数执行
db.run("BEGIN")每caling。把db.run("BEGIN")作为运行只能用时间。还db.run("COMMIT")在循环的结束。跨度> -
尝试
db.run("BEGIN TRANSACTION")也跨度> -
谢谢,但我已经尝试db.run( “BEGIN TRANSACTION”)。此外,每次只调用的函数“开始”和“提交”一次 - 他们是书的目的。不过,或许是由于节点/ JS的异步特性,也许他们是重叠的。让我来看看这个。 SPAN>