それは何ですか
NodeJS用のFirebird接続モジュールの作成者である私は、モジュールがまだ非常に未加工であることを考慮して、それについての投稿を長い間延期しました。 さらに、必要なすべての機能が既にモジュールに含まれているため、モジュールの開発は多少停滞しています(ただし、まだ普遍的とは言えません)。
時々、特定されたエラーを修正するか、NodeJSの最新の安定バージョンとの互換性を確保するために何かを修正する必要が生じるだけです。 NodeJSコミュニティがNoSQLソリューションに注力しているため、このモジュールは人気がないと言わざるを得ません。 そして、Firebirdコミュニティは、明らかにNodeJSを注意深く見ていますが、それほど大きくはありません。 さらに、FirebirdはWindowsプラットフォームでDelphiと併用されることが非常に多いため、Windows固有のLinuxソリューションに興味を持つことも困難です。 ただし、Windowsサポートに向けたNodeJSプロジェクトの最近の重要な進歩は、このような人々の注目をプロジェクトに引き付ける希望を与えました。 この投稿では、NodeJSからFirebirdを操作する方法に焦点を当てます。 LinuxおよびWindowsのインストール手順、典型的な作業シナリオの例を示します。 ただし、このトピックは、Firebirdに少なくとも少し慣れている人向けに設計されています(実験にはデータベースサーバーの作業コピーが必要です)。 Firebirdに慣れていない人のために、出版物の最後に研究のためのリソースへのリンクが与えられます。
興味があれば、猫にようこそ。
設置
Linux
NodeJS
まず、NodeJSが必要です。 インターネットには、NodeJSのLinuxインストールガイドがたくさんあります。 それにもかかわらず、全体像を完成させるには、ここでもう1つ引用する必要があります。 Ubuntu 11.10 Server 32ビットディストリビューションをダウンロードしました。 仮想マシンでインストールが実行されました。 この出版物には、さまざまなディストリビューションの複雑さに対処する方法の説明は含まれていません。 それどころか、結果を得る最も簡単な方法の説明が必要です。
そのため、最小限のパッケージセットでUbuntu 11.10サーバーをインストールしました(OpenSSHサーバーのみ)。
2つのコンソールコマンドでNodeJSのコピーを取得できます。
sudo apt-get update sudo apt-get install nodejs
ただし、新しいディストリビューションにもかかわらず、2011年夏の終わりに関連するNodeJSのバージョンを受け取ります。
xdenser@ubuntu:~$ node > process.version 'v0.4.9' > .exit xdenser@ubuntu:~$
次に、NodeJSパッケージマネージャーをインストールする必要があります。
sudo apt-get install npm
接続するサーバーが既にある場合は、Firebird 2.5の開発パッケージも必要です。
sudo apt-get install firebird2.5-dev
サーバーがない場合は、サーバーをローカルにインストールできます。 このプロセスの説明は、出版物の範囲を超えています。
インストール時に、Firebirdアクセスモジュールがコンパイルされます。 このためには、コンパイラが必要です。
sudo apt-get install g++
実際、この場合のアクセスモジュール自体は次のコマンドで設定されます
sudo npm install firebird@0.0.5 -g
または
npm install firebird@0.0.5
違いは、最初のケースでは、モジュールがグローバルにインストールされることです。 すべてのユーザー向け。
上記のコマンドはモジュールの古いバージョン(この記事を書いている時点での現在のバージョンはv0.0.8)をインストールしますが、ディストリビューションに含まれるNodeJSバージョンv0.4.9と互換性があります。
最新の最新バージョンをインストールするには、次のコマンドを入力する必要があります
npm install firebird
このためだけに、NodeJSをバージョン0.6.xに更新する必要があります。
現在、最も単純なパスを辿っています。
したがって、すべてが適切に設定されていることを確認します。
xdenser@ubuntu:~$ node > require('firebird'); { createConnection: [Function], createConnectionPool: [Function], Stream: { [Function: Stream] super_: { [Function: Stream] super_: [Function: EventEmitter] } } } > .exit xdenser@ubuntu:~$
窓
Windowsの場合、最低限、ご使用のバージョンのWindowsのインストールパッケージからFirebirdクライアントライブラリをインストールする必要があります。
Windows上のNodeJSを使用すると、最近は状況がずっと簡単になりました。 公式のインストールパッケージを使用して、npmパッケージマネージャーを受け取ることができます。
ただし、npmを使用してWindowsにfirebirdモジュールをインストールしないでください。モジュールはソースコードの形式で配布され、Windowsでの自動アセンブリはまだ利用できません。
Windowsの場合、NodeJSがすでに含まれている既製のアセンブリを使用できます。 スクリプトは、アセンブリのルートフォルダーに配置し、コマンドで実行する必要があります
node.exe myScript.js
次は?
何らかのデータベースへの接続を試みることができます。 これを行うには、2つのファイルを作成します
test.js:
var fb = require('firebird'); console.log(fb); var cfg = require("./config").cfg; var conn = fb.createConnection(); console.log(conn); conn.connect(cfg.db, cfg.user, cfg.password, cfg.role, function(){ console.log("Connected to database"); conn.query("select * from rdb$relations", function(err,res){ if(err){ console.log("error"); console.log(err); return; } console.log( res ); var r = res.fetchSync("all",true); console.log( r ); conn.disconnect(); }); });
そして
config.js:
exports.cfg = { // Database connection settings db: "localhost:test.fdb", user: "sysdba", password: "masterkey", role: "" };
当然、config.jsの接続パラメーターは独自のものに置き換える必要があります。
そして、コマンドを実行します
node.exe test.js
行実行
console.log( r );
ファイルtest.jsから、SQLクエリの実行結果のコンソールダンプが得られます
select * from rdb$relations
小さなモジュールのマニュアル
すべてのNodeJSモジュールと同様に、モジュールは同様のコマンドでロードされます。
var fb = require('firebird');
モジュールは基本的に2つのプロパティのみをエクスポートします。
- createConnectionは、Connectionデータベースへの新しい接続オブジェクトを作成するメソッドです。
- ストリームは、BLOB型のフィールドを操作するためのストリームオブジェクトです。
現時点では、BLOBフィールドの使用を検討しません。
そして、パラメーターなしでcreateConnectionメソッドが呼び出されます
var conn = fb.createConnection();
このような呼び出しの後、connは、次のメソッドとプロパティを持つConnectionクラスのインスタンスと見なすことができます。
- connected -Connectionインスタンスの接続状態を反映するプロパティ。
- inTransaction; -現在のトランザクションのステータスを反映するプロパティ(トランザクションの操作については以下を参照)。
- 関数接続(データベース、ユーザー名、パスワード、ロール、コールバック); -データベースへの接続を作成します。
- 関数querySync(sql); -メソッド。 SQLクエリを実行し、FBResultクラスのインスタンスを返します。
- 関数クエリ(SQL、コールバック); -メソッド。 SQLクエリを非同期で実行し、コールバック関数で結果を返します。 結果はFBResultのインスタンスでもあります。
- 関数commitSync(); -メソッド。 現在のトランザクションをコミットします。
- 関数のコミット(コールバック); -メソッド。 現在のトランザクションの非同期コミットを行います。
- 関数rollbackSync(); -メソッド。 現在のトランザクションのロールバックを実行します。
- 関数のロールバック(コールバック); -メソッド。 現在のトランザクションの非同期ロールバックを行います。
- 関数addFBevent(名前); -メソッド。 Firebirdの名前イベントにサブスクライブできます。
- 関数deleteFBevent(名前); -メソッド。 Firebirdの名前イベントから退会します。
FBResultクラスのインスタンスは、2つのメソッドのみを提供します。
- 関数fetchSync(rowCount、asObject); -メソッド。 クエリ結果からrowCount(またはそれ以下)レコードのJavaScript配列を返します。 asObjectパラメーターはtrueまたはfalseです。 各レコードの表示形式はそれに依存します。 trueの場合、各エントリはJavaScriptオブジェクトで表され、各フィールドは同じ名前のプロパティに対応します。 falseの場合、各レコードは単なる値の配列です。 fetchSyncは、2次元配列を返します。
- 関数フェッチ(rowCount、asObject、rowCallback、eofCallback); -メソッド。 レコードの非同期選択を実行します。 最初の2つのパラメーターは、fetchSyncメソッドに対応しています。 rowCallbackは、選択範囲の各レコードに対して実行されるコールバック関数であり、asObjectに応じてオブジェクトまたは配列の1つのパラメーターを受け取ります。 2番目のeofCallbackコールバックは、選択が終了すると実行され、入力として2つのパラメーターを受け取ります。
- err-エラーの場合、これはErrorオブジェクトです。
- eof-選択範囲の終わりのサイン。選択範囲の終わりに達した場合にのみ真です。
より完全なガイドは、モジュールに付属のREADMEファイルにあります。 GitHubのリポジトリでオンラインで読むこともできます 。
トランザクションを操作する
現在のバージョンのモジュールは、完全なトランザクション管理機能を提供していません。 各Connectionオブジェクトは、リクエストを実行する前にトランザクションを自動的に開始します(以前に開始されなかった場合、またはcommitSync、commit、rollbackSync、rollbackのいずれかのメソッドによって中断された場合)。
おそらく、モジュールの最初の実験には、この量の材料で十分です。 このトピックに興味がある場合は、BLOBフィールド、イベント、および準備されたクエリの使用例を公開します。
さらに、ブラウザを介してFirebirdデータベースへのSQLクエリを実行するための対話型サービスを実装するサンプルプロジェクトを準備しました。
参照:
- githubのモジュールストレージ
- Firebirdの公式ウェブサイト
- NodeJSの公式Webサイト
- UbuntuにFirebirdをインストールする
- Windows Firebirdインストールガイド
- Firebird FAQ-質問に対する多くの回答
- モジュールを使用したFirebirdでのイベントの操作に関するブログ投稿 (英語)
- モジュールの使用に関する最初の投稿の1つ