使用sqlite3和node.js插入Id字段自动增量

时间:2014-02-25 18:13:25

标签: node.js sqlite

我正在尝试使用node.js插入sqlite3。我需要一个唯一的id字段,但我希望它能自动生成,所以我不必在插入表时插入它。 我正在连接并创建表,但是当我插入它时,我希望我提供一个id字段。 这是迄今为止的代码:

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('database/setup.db');


db.serialize(function() {
db.run("CREATE TABLE items (id INTEGER PRIMARY KEY, title TEXT, images TEXT, bid INTEGER, currentBidder TEXT)");

var stmt = db.prepare("INSERT INTO items VALUES(?,?,?,?)");
stmt.run('Title test 123', 'http://testshjshs', 100, 'shane'); 
stmt.finalize();

db.each("SELECT rowid, title FROM test", function(err, row) {
  console.log(row.rowid + ": " + row.title);
});

});

db.close();

这会返回以下错误。

Error: SQLITE_ERROR: table items has 5 columns but 4 values were supplied

我理解为什么它会返回以下错误,但是如何设置它以便插入自动插入字段或这是不可能的? 感谢

2 个答案:

答案 0 :(得分:11)

该表已声明为五列,因此当您只为INSERT提供四个值时,它不知道要省略哪一列。

要么明确说明要插入哪些列:

INSERT INTO items(title,images,bid,currentBidder) VALUES(?,?,?,?)

或者给所有五列赋值(NULL表示自动增量):

INSERT INTO items VALUES(NULL,?,?,?,?)

答案 1 :(得分:0)

如果您想在表中使用自动递增字段,请在创建表时省略WITHOUT ROWID命令,SQLite将在行名称rowid

http://www.sqlitetutorial.net/sqlite-autoincrement/