問題タブ [node-sqlite3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - `node-sqlite の各関数はすべてのクエリをメモリにロードしますか、それともハードディスクからのストリーム/パイプを使用しますか?
10,000,000 行を処理したい
これは私のコードです:
問題は、RAM をすべて使い果たしてしまうのか、それともハード ドライブから行ごとに読み取るのかということです。
node.js - Nodjs Sqllite3がディスクにフラッシュされない
ディスクにフラッシュしない sqlite3 に問題があります。私が使用しているコードは以下のとおりです。ファイルリストの合計は 470k を超えており、プログラムは数ギガバイトのメモリを使用する傾向があります。プログラムの実行中、test.db は 0 バイトであり、ジャーナルは使用されません。が実行されているときにのみ、ディスクへの書き込みが開始されます db.close()
。
削除しようとしましdb.run("BEGIN;");
た db.run("COMMIT;");
が、役に立ちません。
バグ?
これを github のバグとして報告しています
node.js - トランザクションから last_insert_rowid を取得するには?
node-sqlite3 を使用して、node.js アプリケーションからデータベースで INSERT + UPDATE トランザクションを実行しようとしています。ただし、トランザクションが完了したときに last_insert_rowid を取得する方法がわかりません。私のクエリは次のようになります。
この文字列 (余分な空白を除く) が var に割り当てられq
ます。
これを使用して、ある時点でデータベースを開きました:
しかし、私が使用しようとすると:
エラーなしで「0」を出力するだけでなく、データベースへの変更も発生しません!!! exec
代わりに使用するとrun
、クエリは正常に実行されますが、exec からデータを取得する方法がありません。
私も次のようなことを試しました:
しかし、「run」の「this」コンテキストには lastId プロパティがありません!
sqlite3-transaction パッケージも調べましたが、トランザクション コールバックでも情報が提供されていないようです。
挿入を別の run() として実行し、それを取得してthis.lastId
からそれを使用して更新を実行することはできません。これは、2 つのステートメントの間でデータベースが無効な状態のままになるためです (したがって、トランザクションが必要です)。
このトランザクションから last_insert_rowid() を取得するにはどうすればよいですか?
javascript - sqlite3 を使用した node.js の変数の有効性
node.js の sqlite3 で select ステートメントを実行します。結果を変数「データ」に入れたいのですが、これは sqlite コード ブロックの外側で定義されていますが、空のままです。sqlite コード ブロック内では、データ変数に正しい値が含まれています。私が間違っていることを誰かが知っていますか?
ありがとうございました。
node.js - db.serialized()が終了する前にsqlite3 db.close()が呼び出されました
私はsqlite3のネストされたクエリケースを持っています。各クエリ結果をjson配列にプッシュして返すことを望んでいました。ただし、2 回目の選択呼び出しでは、常に「エラー: SQLITE_MISUSE: データベース ハンドルが閉じられています」というメッセージが表示されます。2 番目のクエリの前に db.close() が呼び出されるようです。
これはなぜですか、シリアライズでこれを処理できると思いました。修正方法を教えてください。
javascript - 適切な配列を使用した HTTP 要求への応答に問題がある。関数内からexpressjsで結果を送信する方法はありますか?
問題の概要: バックエンドに SQL データベースを持つプログラムに取り組んでおり、npm SQLite3 モジュールを使用して対話しています。サーバーに HTTP リクエストを行うと、別の投稿で、そのres.send
中の関数を使用して関数を実行する必要があると言われました。そのため、関数が実行された後、関数から来たものは何でも返されます。簡単ですよね?しかし、その後、非同期関数.all
(API Doc here)で問題が発生しました。基本的に何が起こるかというと、データベースを呼び出すと、内部のすべてが database.all 内のオブジェクトに返されますが、database.all は無効で何も返せない非同期関数です。コールバック内でオブジェクトを送信するコールバックがありますが、そこからどうすればよいのか、コールバックが必要なのかさえわかりません。
私の質問は、.all
関数またはコールバック内のどこかから HTTP 応答を送信できますか、それとも関数が呼び出された場所に配列を返す必要があるかということです。以下のコードは、私が何を意味するかを示しています。
一連のイベント(参照用の Github リポジトリ) :
ページの読み込み時に次の HTTP リクエストを送信するように角度コントローラーをセットアップしました。
サーバー (server.js) がそれを受信したら、次のようにします。
test.js という名前の別のファイルで loadWaitingList() 関数を実行します。
これはupdateDB.Manager
、別名この男を呼び出します:
最後に、db.all
実行後、私が求めている値を in で確認できますrow
。row
パラメータとして渡されdb.all
、配列として返されるので、外部で宣言してdb.all
渡してから結果を出力しようとしましたが、db.all
非同期であるため、関数がまだ実行されていないため、常に空になります。
コールバックを実行し、コールバックが呼び出された後に (vscode デバッガーを使用して) オブジェクトをチェックするとreturnRow
、データベースから適切なデータが含まれています。
入れられrow
、最終的returnRow
に応答として返されるデータを送信するにはどうすればよいですか? HTTP リクエストを別の方法で取得したときに最初の関数呼び出しを実行してres.send
から、コールバックなどから実行することは可能ですか?
sql-server - nodejs は node-mssql を使用して mssql に接続します
node-mssql ( https://github.com/patriksimek/node-mssql/issues ) を使用して mssql に接続しようとしています。これが私の設定です:
これが私の接続コードです
これが私のエラーです: (中間値).query(...).then は関数ではありません。
どうしてこうなるのか、私にはわかりません!!
誰か助けて!
node.js - Node.js、Express.js、および sqllite3.js
Node.js のオブジェクト属性に問題があります。テストオブジェクトでは属性が期待どおりに設定されていますが、articleオブジェクトでは同じことが機能しません。私が見る違いは、アーティクルの関数が非同期で呼び出されることです。私は少し道に迷っていることを告白しなければなりません...
testオブジェクトとarticle オブジェクトをインスタンス化するapp.jsを次に示します。
ここに私のかなり単純な test.js があります:
ここに私のかなり単純な article.js があります:
node.js - sqlcipher をサポートする node-sqlite3 を要求する方法
node-sqlite3パッケージを必要とするパッケージがあります。ただし、node-sqlite3 を sqlcipher サポート付きでビルドする必要もあります。そうしないと、パッケージが正しく機能しなくなります。
以下を使用して node-sqlite3 をインストールしています。
ただし、完了してpackage.jsonを見ると、次のように表示されます。
sqlcipher の要件については言及されていません。この要件で単純にパッケージをインストールしようとすると、sqlcipher サポートを使用してビルドされず、適切なキーが存在する場合でも、sqlcipher で暗号化されたデータベースを読み取ることができないため、アプリが失敗します!
さらに、別のプラットフォームでは、sqlcipher が同じ場所にインストールされるという保証はありませんが、問題を少し簡単にするために、既に構築されており、どこかに存在すると仮定できます。
この依存関係の要件を適切に指定するにはどうすればよいですか?
node.js - 「db.serialize」は「node-sqlite3」でどのように機能しますか
最近、node とnode-sqlite3を使用して sqlite3を操作する方法を学んでいます。ここにサンプルがあります。
ドキュメントには、db.serialized
SQL 行が順番に実行されるようにするために使用されると書かれていましたが、私は混乱しdb.serialize
ました。ここではどのように機能しますか?
また、実行するSQLが1つしかない場合、次のようにせずに実行しても安全db.serialize
ですか?