【问题标题】:sqlite3 create database with callback using Nodesqlite3使用Node创建带有回调的数据库
【发布时间】:2018-12-13 12:12:45
【问题描述】:

我搜索了如何在 Node.js 中创建带有回调的 sqlite3 数据库,但找不到任何链接。有人可以将我指向文档或提供 2-3 行代码示例来实现以下目标:

  • 创建一个 sqlite3 数据库,并在创建因任何原因失败时捕获错误。

这是我尝试过的:

     let dbCreate = new sqlite3.Database("./user1.db", sqlite3.OPEN_CREATE, function(err){

        if(!err){
           logger.infoLog("Successfully created DB file: " + dbFileForUser + " for user: " + username );
        } else {
           logger.infoLog("Failed to create DB file: " + dbFileForUser + ". Error: " + err );
        }
     });

     dbHandler[username]  = dbCreate;

执行此操作时,出现以下错误: “创建数据库文件失败:./database/user1.db。错误:错误:SQLITE_MISUSE:错误参数或其他 API 滥用”

这个没有回调的调用就可以了。

var customDB = new sqlite3.Database("./custom.db", sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);

但是在这里,我不知道我在创建数据库时是否遇到任何错误。

【问题讨论】:

    标签: node.js sqlite


    【解决方案1】:

    试试这个:

    let userDB = new sqlite3.Database("./user1.db", 
        sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, 
        (err) => { 
            // do your thing 
        });
    

    Example.

    【讨论】:

    • 感谢您的及时响应并链接到看起来很棒的文档。在我发布问题并且您的文档有类似的解决方案后,我确实找到了解决方案。自从您提供了文档以来,我很乐意为此感谢您,但是您当前的答案也有同样的问题。回调为......, function(err) { // 做你的事 });这是有效的代码: let userDB = new sqlite3.Database("./user1.db", sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => { //do your thing });如果您更新答案以反映这一点,我会接受。
    • 成功了,详细信息可以在sqlitetutorial.net/sqlite-nodejs/connect找到。
    • 我仍然收到SQLITE_CANTOPEN: unable to open database file。我能做什么?
    • 我通过将没有目录的文件位置传递给 sqlite3.database 解决了 SQLITE_CANTOPEN 问题。例如 let userDB = new sqlite3.Database("./**file-path-with-no- directory**.db", sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => { //do your thing }) ;
    【解决方案2】:

    @Irvin 是正确的,我们可以看看http://www.sqlitetutorial.net/sqlite-nodejs/connect/ 和 检查它是否说如果你跳过第二个参数,它的默认值为sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE 在这种情况下,如果数据库不存在,则将使用连接创建新数据库。

    sqlite3.OPEN_READWRITE:打开数据库连接,进行读写操作。

    sqlite3.OPEN_CREATE : 创建数据库(如果不存在)并打开连接。

    因此,这是您必须跳过第二个参数并无需额外努力即可解决问题的第一种方法。

    const sqlite3 = require("sqlite3").verbose();
    
    let db = new sqlite3.Database('./user1.db', (err) => {
        if (err) {
            console.error(err.message);
        } else {
            console.log('Connected to the chinook database.|');
        }
    });
    
    
    db.close((err) => {
        if (err) {
            return console.error(err.message);
        }
        console.log('Close the database connection.');
    });
    

    这是连接数据库的第二种方式(已由@Irvin回答)。

    const sqlite3 = require("sqlite3").verbose();
    
    let db = new sqlite3.Database('./user1.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE
    , (err) => {
        if (err) {
            console.error(err.message);
        } else {
            console.log('Connected to the chinook database.');
        }
    });
    
    
    db.close((err) => {
        if (err) {
            return console.error(err.message);
        }
        console.log('Close the database connection.');
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2014-06-28
      • 2012-09-05
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多