gpt4 book ai didi

javascript - node.js 脚本中的 SQLITE_MISUSE 错误

转载 作者:搜寻专家 更新时间:2023-10-31 23:10:16 27 4
gpt4 key购买 nike

当我用这个查询启动代码时,有时我可以看到列出的所有表,有时只看到一个,而且我总是得到这个错误:

查询错误:错误:SQLITE_MISUSE:未知错误

我读到当 SQLITE API 使用不当时会发生 SQLITE_MISUSE。你能帮帮我吗,因为我找不到这段代码中的错误。

编辑。我已更改代码以消除竞争问题。

带有 SQLITE_MISUSE wrror 的消息仍然出现,但是消失的表问题已经消失。我的查询中的种族就是这种情况。

这是代码。

var sqlite3 = require("node-sqlite3");
var fs = require('fs');

var query_count;
var init = function (response) {
var db = new sqlite3.Database("test.db", function() {

fs.readFile('./assets/sql/initDB.sql', function(err,data){
if(err) {
console.error("Could not open file: %s", err);
return;
}

var query = data.toString('utf8');
queries = query.split(";");

db.serialize(function() {
query_count = queries.length;
for(var i=0; i<queries.length; i++) {
queries[i] = queries[i].replace("\r\n","");
db.run(queries[i], function(error) {
if(error) {
console.log("Query Error: "+error);
}

query_count--;

if( query_count <= 0 ) {
db.close();
listAllTables(response);
}
});
}
});
});
});
};

function listAllTables(response) {
var db = new sqlite3.Database("./assets/sql/test.db", function () {
db.all("SELECT name FROM sqlite_master WHERE type = 'table'", function (error, records) {
for(var record in records) {
response.write(record+": "+records[record]+"\n");
for(var prop in records[record]) {
response.write("\t"+prop+": "+records[record][prop]+"\n");
}
}

response.end();
db.close();
});
});
}

exports.load_customers = function(response) {
init(response);
};

查询文件initDB.sql是这样的:

CREATE TABLE IF NOT EXISTS TemporaryAuthTokens (
authToken TEXT PRIMARY KEY NOT NULL UNIQUE,
expireDate NUMERIC NOT NULL);

CREATE TABLE IF NOT EXISTS User (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE ,
login TEXT NOT NULL ,
pass TEXT NOT NULL ,
creationDate NUMERIC NOT NULL ,
authToken TEXT NULL REFERENCES TemporaryAuthTokens(authToken)
);

最佳答案

你有一个竞争条件;您的最后一个查询(其回调关闭连接)可能会在较早的查询之一完成之前完成,并且不用说,这将对较早的查询进行处理。您需要重新编写您的代码,以便最后一个查询完成,而不是最后一个查询开始,关闭连接(例如,设置查询次数的计数器和让每个查询在完成时将其递减。将其递减为零的查询将关闭连接)。

您可能还想查看可用于数据库对象的 serialize 方法。现在你的初始化查询都是相互独立的,但是如果你开始使用外键约束,如果引用的表还没有创建,你就会遇到麻烦,所以你需要强制执行顺序。

关于javascript - node.js 脚本中的 SQLITE_MISUSE 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12139481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com