2016-10-21 42 views
0

我試圖插入一些依賴於以前查詢的數據的數據,我序列化了查詢和插入,但是我無法獲得正確的結果。如何在nodejs中正確序列化db.prepare sqlite3

我構建了這個簡單的例子來顯示我的錯誤。它只是查詢表中的行數,並將其插回到表中。

db.serialize(function() { 
    var count=0; 
    db.each("SELECT count(rowid) FROM info", function(err, row) { 
    count = row['count(rowid)']; 
    }); 

    var stmt = db.prepare("INSERT INTO info VALUES (?)"); 
    stmt.run('Lorem ipsum '+(count+1)); 
    stmt.finalize(); 

}); 

如果我運行此代碼三次,檢查數據,我剛剛得到的字符串「Lorem存有1」三次。

此外,如果我的stmt.finalize指令

db.each("SELECT count(rowid) FROM info", function(err, row) { 
    count = row['count(rowid)']; 
    console.log('count info',count); 
    }); 
    db.each("SELECT rowid AS id, info FROM info", function(err, row) { 
    console.log(row.id + ": " + row.info) 
    }); 

查詢正確序列化後添加一些查詢代碼,我得到預期的計數,但還是壞的插入(在這個例子中我跑了插入代碼的五倍)

count info 5 
1: Lorem ipsum 1 
2: Lorem ipsum 1 
3: Lorem ipsum 1 
4: Lorem ipsum 1 
5: Lorem ipsum 1 

你能解釋db.prepare()這種行爲?你能提出更正嗎?

回答

0

我不確定2個月後這個答案仍然有用。

首先插入「'Lorem ipsum'+(count + 1)」我們需要迭代。

其次SQL查詢需要返回列。

db.serialize(function() { 
     db.run("CREATE TABLE IF NOT EXISTS info (info TEXT)"); 

     var stmt = db.prepare("INSERT INTO info VALUES (?)"); 
     for (i = 0 ; i < 5 ; i++) { // an iteration is required to insert data into the table 
      stmt.run('Lorem ipsum '+ i); 
     } 

     stmt.finalize(); 

     db.each("SELECT rowid AS id, info FROM info", function(err, row) { // columns should be retrieved 
     console.log(row.id + ": " + row.info); 
     }); 
}); 

欲瞭解更多信息,請參閱docs

+0

我需要增加行的當前計數。您的代碼將始終插入0 1 2 3 4 –