LoginSignup
8
7

More than 5 years have passed since last update.

【俺メモ】node-sqlite3でデータが取れなかった時の処理

Posted at

node.js用のSqlite3のパッケージnode-sqlite3のdb.eachを使ったときのメモや。
インストールとか省略。

SQLの実行結果が0件の場合を検知できないパターン

app.js
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('db.sqlite3');

db.serialize(function() {
    //取り出したレコードを1行ずつループするeachを使うで
    db.each('SELECT * FROM test WHERE id = ?', [n], function(err, row) {
        if (err){
            //エラー処理してな
        }else{
            //rowの値を処理するところや
        }
    });
    //eachで結果が0件ならcallbackの処理が走らんさかい、注意な。
});

complete処理追加で解決

追加したところを抜粋すんで。

app.js
    //取り出したレコードを1行ずつループするeachを使うで
    db.each('SELECT * FROM test WHERE id = ?', [n], function(err, row) {
        if (err){
            //エラー処理してな
        }else{
            //rowの値を処理するところや
        }
    }, function(err, count){  //←complete処理追加
        //SQL実行直後に上のコールバック処理が走る前にここが処理されるで。
        if (err){
            //エラー処理な
        }else{
            if (count == 0){
                //ここでSQLの実行結果が0件の処理や
            }else{
                //処理や
            }
        }
    });
});

db.eachの外側に件数が0件の判定を書いても無駄なあがきになるさかい注意な。
なんせ非同期で処理が進んで先に外側の処理が動いてまうからな。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7