2009年10月25日日曜日

Yawdba開発談(4)

今日は、Yawdbaの開発状況についてお話します。現在、ODBC接続によりデータベースを取得する部分の処理が大方終わりました。この部分は、以下の3つのクラスで構成されています。
  1. ODBC接続を行ってコネクションを作成するクラス
  2. コネクションからStatementを作成して、クエリやアップデートなどSQLコマンド実行するクラス
  3. 上記クラスのクエリコマンド実施によって得られたデータをテーブルに格納するクラス(DBTable)
から、構成されています。Yawdbaでは、DBTableクラスのインスタンスデータをWeb画面に表示させることになります。
今回の開発では、ODBC接続やStatement作成のクラスで発生したエラーをどうハンドリングをJavaの例外処理を使ってコーディングしています。
Yawdbaでは、何かエラーがあった場合には、基本的にエラー発生として画面表示させることにしたため、下位モジュールでは、エラーが発生した場合、Throwにより例外を発生させ、Yawdbaの最も上位モジュールでキャッチをして、エラーメッセージを表示させるようにしています。

今後は、ODBCの接続などの情報をキャッシュ化してパフォーマンス向上を図りたいと思います。

2009年10月20日火曜日

javaのsqlアクセスメソッドgetStringで文字化け?

通常、javaを使ってデータベースにアクセスするには、java.sqlのStatement変数のexecuteQueryメソッドを使用します。そして、このexecuteQueryメソッドで得られたResultSet変数を元に、レコード位置を指定したり、データを取り出します。
データを取り出すには、得られたResultSet変数のgetStringメソッドを使うケースが多いと思います。Yawdbaでも、同様の方法でMSAccessデータベースからデータを取り出していましたが、日本語文字データで文字化けが発生しました。どうも、日本語文字の奇数バイト目でデータが切れているために文字化けが発生しているように思われました。getStringと言うメソッド名からすると問題ないように思われますが、どう言う訳か、文字化けが発生しました。

別の方法がないか試行錯誤した結果、現在は次のような方法でデータをアクセスしています。現在のところ、問題なく動作しています。

取得するデータが文字列の場合には、getStringメソッドではなく、getCharacterStreamメソッドを使います。getCharacterStreamメソッドでjava.io.Reader変数を取得し、このReader経由で文字列を取得しています。この方法では、問題なくデータ取得ができるようになりました。

MSAccessデータベース内のデータは、外部のファイルとみなすべきであり、getCharacterStreamで取り出すべきかもしれません。しかし、本来、外部インタフェースとJava内部の処理との間でこれらの面倒を見るべきは、jdbcのような気がします。ひょっとすると、これは、利用したjdbcドライバ(odbcドライバ)の問題かもしれません。

2009年10月12日月曜日

Yawdbaでは、JavaScriptのオブジェクト化が必要?

Yawdbaでは、URLの指示によって決定されたルールによってデータベースの情報を取り出してWeb画面に表示します。しかし、Web画面に表示するだけであると、あまり見栄えの良い画面になりません。
昔のWeb画面のように、単に表が表示されるだけです。最近のWebでは、Ajaxと呼ばれる機構を用いて、HTMLのJavaScriptの中から、Webサーバーにアクセスして、データ取得を依頼し、データが取得されたら、JavaScriptを使って、ドロップダウンリストにデータを表示させたりすることができます。

Yawdbaでも、データベースのテーブルをHTML+JavaScriptの基本機能を使って、できるだけリッチなクライアントにしたいと思っています。
組み込むJavaScript手続きも、できるだけ今後の拡張に備えて、JavaScriptをオブジェクト指向に合わせた書き方にしたいと思います。このため、JavaScriptのオブジェクト指向の記述について検討して、有効なサブルーチンを作りたいと思います。

試験が終わるのが来週ですので、来週以降、Yawdbaのサイトにも情報を展開したいと思います。

2009年10月5日月曜日

AutoPostBackの画面ちらつきを防ぐサンプルをアップしました

以前より、AutoPostBackでの画面ちらつきを防ぐ方法を書いてきましたが、そのサンプルソースをアップしました。「AutoPostBackで画面のちらつきを防ぐ方法」をご覧ください。
このページの添付ファイルには、そのASP.NETソースプログラム(VB)も付けてあります。参考にしてください。

2009年10月3日土曜日

ASP.NETでエラー発生時に対応方法は

ASP.NETでのWebサービス上でロジックの誤りなどでエラーが発生して処理が中断される場合に下のような画面が表示されることがあります。
通常、ASP.NETサーバーのデバッグなどでエラーを発生した場合には、エラーが発生した際のVBプログラムなどを表示します。しかし、システムの運用時にこのようなエラーメッセージを表示させることは適切ではないので、上のような画面が表示されます。
このような場合には、ASP.NETサイトのルートフォルダーに存在するweb.configファイルで、画面に指示にあるように、「< customErrors mode="off" >」を指定します。
本来的には「< customErrors mode=..... >」や「< error mode=..... >」タグを使って、エラーメッセージ画面を定義することで、それぞれのエラーに合ったエラーメッセージを表示することができます。

2009年10月1日木曜日

今、JavaScriptの正規表現について勉強中です。

Yawdbaでは、Web画面でユーザが入力したときなどに、エラーチェックが必要だと思っています。しかし、このチェックをWebサーバーサイドで行うと画面のちらつきなどが発生してしまうので、エラーチェックについては、JavaScriptにせざるおえません。
エラーチェックには、入力した文字列が数字かどうか、日付かどうか、あるいは、離散的な値か、などいろいろのパターンがあります。それぞれの文字パターンについて検査する必要がありますが、これをJavaScriptでゴリゴリ書いていては、能がありません。現在は、JavaScriptの正規表現で、見通しの良いJavaScript関数ができないか検討しています。

とりあえず、数値かどうか判断するための関数を作ってみました。正規表現では、「[0-9]+」までで整数部分、「(\x2e[0-9]*)?」で小数部分を表しています。\x2eはピリオドを16進数で表したものです。

★ JavaScript
function check(v)
{
str = v ;
rnum = /[0-9]+(\x2e[0-9]*)?/; /* 正規表現文字列 */
if(rnum.test(str)) {
alert("数値です");
}
else {
alert("エラー発生");
}
}

★ Html
<input type="text" name="mytext" >
<input type="button" value="Check" onClick="check(mytext.value)">

正規表現は、検索する文字列に正規表現パターンが現れるとパターンマッチしてしまいます。例えば「a 1234 ddd」と言う文字列を検査しようとした場合、文字列の一部に「1234」の数字と認識できるパターンがありますので、数字と成ってしまいます。どうしたらよいでしょうか?お知恵を拝借できればと思います。
今回は、数字かどうか判断するものでしたが、今後は、Yawdbaのサイトに順次掲載したいと思います。