[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-dev:00527] DBSaccessor



小林@九大です

 ようやく,DBSaccessorが動作するようになりました。サンプルコードとして
LocalPt.javaと一緒に公開します。なお,tbl_ptinf.db, tbl_test.dbd,
execdbs.shもアップデートしました。ご参照ください。事前にdbsのソースをcvs
版から入手して,makeしておく必要があります。[orca-dev:00505]をご参照くだ
さい。
 簡単に仕様を示します。なお,Java側の文字コードはUTF-8を前提としており
ます。いろいろと調査を重ねる事に仕様が変わって,当初の設計とは異なってし
まいましたので,ソースが汚くなっていることをご容赦ください。開発に際して
は高垣先生やofvlの加藤さんのご協力がありましたこと,この場を借りて感謝い
たします。基本的にpanda付属のDB_Serverクラスを改変し,Ruby版のdbslib.rb
をJavaに移植した形にしております。

クラスDBSaccessor.java 
【概要】ORCAのデータベースにHAKAMA(dbs)を介してアクセスするクラス。
【フィールド】
static final String version: MONTSUQIのバージョン
String host: ホストのIPアドレス
int port: ホストにアクセスするポート
String user: ORCAユーザー名
String pass: ORCAユーザーのパスワード
Socket dbsock: HAKAMAに接続するソケット
PrintWriter dbsout: HAKAMAへの文字列出力ストリーム
BufferedReader dbsin: HAKAMAからの文字列入力ストリーム
HashMap values: ORCAのデータベースを格納するハッシュ
【コンストラクタ】
DBSaccessor(String host, int port, String user, String pass)
 ホストのIPアドレスをhost,接続ポートをport,ORCAのユーザー名をuser,パ
スワードをpassに指定し,HAKAMAへの認証を行い,ソケット接続を確立する
【メソッド】
void authenticate()
 HAKAMAを介してユーザー認証を行う。
boolean checkResult()
 dbsが返すresult code(Exec: の後の数字)が0であればtrue,それ以外あるい
は接続が切断されるとfalseを返す
void closeSession()
 接続セッションのクローズ
void closeSocket()
 接続ソケットのクローズ。close sessionから呼び出される
void sendData(HashMap rec)
 recordOpsから呼び出される。Hashに格納されたデータベースのカラム名と値
を送信する。
void dbOps(String func)
 db操作コマンドをHAKAMAに送信する
String decode(String str)
 HAKAMAから受信したデータをデコードし,EUC-JP->UTF-8へコード変換も行う
String encode(String str)
 HAKAMAへ送信するデータへエンコードする。UTF-8からEUC-JPへコード変換も
行う
String getSchema(String rname, String pname)
 テーブル名をrname,パス名をpnameで指定してdb定義体で定義したデータベー
ススキームを取得。
HashMap getValues(HashMap rec, String tableName)
 テーブル名をtableNameに指定し,データレコードをHashMap recに格納する。
recordOpsから呼び出し
HashMap getValues(String key)
 テーブル名をkeyに指定し,データレコードを取得。現行バージョンでは使用さ
れない。
boolean recordOps(String func, String rname, String pname, HashMap rec)
 DB定義体に指定したデータベース名rname,パス名pnameに対してfuncで定義さ
れたコマンドを発行し,結果をrecに格納する。

 db定義体の書式についてはいまひとつよく分からないところがありますが,サ
ンプルコードLocalPt.javaではHOSPID,PTIDを指定してNAMEを取得するところま
で来ております。

-- 
KOBAYASHI, Shinji <skoba@xxxxxxxxxxxxxxxxxxxxxxx>