SQLite表创建错误

3

我正在使用一个示例来学习node.js/sqlite3,这里展示了这个示例:https://github.com/mapbox/node-sqlite3/blob/master/examples/simple-chaining.js

在这个示例中,表只有一列,我想扩展它,使表具有三列——用户名、密码和登录次数。

因此,我更改了原始代码,如下所示:

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$ 

我创建表的方式是否不正确?我参考了SQLITE API和W3schools,但似乎没有指出我的做法是错误的。
以下是我的代码:
/**
 * 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();
1个回答

3

看起来表格已经存在了,可能是由于之前运行脚本的原因。最快的测试方法就是更改你正在创建的SQLite数据库的名称。

db = new sqlite3.Database('chain.sqlite3', createTable);

to

db = new sqlite3.Database('chain2.sqlite3', createTable);

如果这样能行的话,那就是问题所在。如果存在该表,您也可以修改脚本,在创建表之前先删除它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接