SQLITE TABLE创build错误
我正在学习一个示例来学习node.js / sqlite3,如下所示: https : //github.com/mapbox/node-sqlite3/blob/master/examples/simple-chaining.js
在这个例子中,表只有列,我想扩展它,所以表有三列 – 用户名,密码和login计数。
所以我改变了原来的代码,在这里:
function createTable() { console.log("createTable lorem"); db.run("CREATE TABLE IF NOT EXISTS lorem (info TEXT)", insertRows); }
对此:
function createTable() { console.log("createTable lorem"); db.run("CREATE TABLE IF NOT EXISTS lorem (info TEXT, name TEXT)", insertRows); }
但是当试图用值填充时,我得到一个错误:
~:dev$ node chaining.js createDb chain createTable lorem insertRows Ipsum i events.js:72 throw er; // Unhandled 'error' event ^ Error: SQLITE_ERROR: table lorem has 1 columns but 2 values were supplied ~:dev$
我错误地创build表吗? 我提到了SQLITE api,以及W3school,但似乎没有表明我做的不正确。
我已经提供了我的代码如下:
/** * Shows how to use chaining rather than the `serialize` method. */ "use strict"; var sqlite3 = require('sqlite3').verbose(); var db; function createDb() { console.log("createDb chain"); db = new sqlite3.Database('chain.sqlite3', createTable); } function createTable() { console.log("createTable lorem"); db.run("CREATE TABLE lorem (info TEXT, name TEXT)", insertRows); } function insertRows() { console.log("insertRows Ipsum i"); var stmt = db.prepare("INSERT INTO lorem VALUES (?, ?)"); for (var i = 0; i < 10; i++) { stmt.run("Ipsum " + i, "lala " + i); } stmt.finalize(readAllRows); } function readAllRows() { console.log("readAllRows lorem"); db.all("SELECT rowid AS id, info, name FROM lorem", function(err, rows) { rows.forEach(function (row) { console.log(row.id + ": " + row.info + ": " + row.name); }); closeDb(); }); } function closeDb() { console.log("closeDb"); db.close(); } function runChainExample() { createDb(); } runChainExample();
这听起来像表已经存在,可能从您的脚本的以前运行。 testing这个最快捷的方法就是改变你正在创build的sqlite数据库的名称。
db = new sqlite3.Database('chain.sqlite3', createTable);
至
db = new sqlite3.Database('chain2.sqlite3', createTable);
如果可行的话,那就是这个问题。 您也可以修改脚本,使其在创build之前首先删除表,如果存在的话。