javascript – node.js脚本中的Sqlite SQLITE_MISUSE错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – node.js脚本中的Sqlite SQLITE_MISUSE错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2290字,纯文字阅读大概需要4分钟。
内容图文
![javascript – node.js脚本中的Sqlite SQLITE_MISUSE错误](/upload/InfoBanner/zyjiaocheng/907/9dced23b32994f15957e08a3e0714e67.jpg)
当我使用此查询启动代码时,有时我可以看到列出的所有表,有时只有一个,我总是得到这个错误:
查询错误:错误: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)
);
解决方法:
你有一个竞争条件;你的最后一个查询(其回调关闭连接)可能会在之前的一个查询之前完成,而且不用说,这会使之前的查询变得模糊不清.您需要重新编写代码,以便最后一个查询完成,而不是最后一个查询开始,关闭连接(例如,将计数器设置为查询数,并在每个查询完成时减少它.减去它的那个.零关闭连接).
您可能还想查看数据库对象上可用的序列化方法.现在你的初始化查询都是相互独立的,但如果你开始使用外键约束,如果尚未创建引用的表,你就会遇到麻烦,所以你需要强制执行的顺序.
内容总结
以上是互联网集市为您收集整理的javascript – node.js脚本中的Sqlite SQLITE_MISUSE错误全部内容,希望文章能够帮你解决javascript – node.js脚本中的Sqlite SQLITE_MISUSE错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。