- PR -

Javaオブジェクト、SQL文の相互変換

1
投稿者投稿内容
いしと
会議室デビュー日: 2005/06/29
投稿数: 11
投稿日時: 2005-10-28 21:22
以下のことをやりたいと考えています。
1)とあるツールにて検索条件を設定
2)検索条件をJavaオブジェクトに変換
3)JavaオブジェクトからXMLを生成し、XMLファイルを保存
4)XMLファイルを読み込みJavaオブジェクトを構築
5)JavaオブジェクトからSQL文を構築

出来るだけSQL文の構造を保ったままJavaオブジェクトを構築したいと思っています。
制限はあるにしろ、検索条件をJavaオブジェクトで保持するという仕様は多々あるように思えます。
どなたか、そのようなAPIをご存じないでしょうか?
構文解析からやるのは流石にちょっと辛いので・・・
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-28 22:31
3と4のXML<-->Javaに関しては、JAXB等のバインディング技術もしくは、
java.beans.XMLDecoder/XMLEncoderというAPIが使用可能ではないでしょうか。

5に関しては、汎用的なSQLのシンタックスツリーを
構築するAPIが欲しいとの事でしょうか?
何を行いたいのかよくわかりませんでした。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-10-28 22:45
るぱんです。

Hibernateみたいな
ORMapperの事をさしているのでしょうか・・・?
いしと
会議室デビュー日: 2005/06/29
投稿数: 11
投稿日時: 2005-10-28 23:51
すんません、説明不足ですね。
やりたいのは、↓こんな感じです。
GUI<--> Java <--> SQL文
Java <--> XML
JavaのところはDOMのような構造化されたオブジェクトが入ると考えてます。
SQLの構文に従ったDOMって感じですね。
whereってタグの下には、カラム名と演算子と比較演算子と論理演算子と・・・を作ることができて〜という感じです。
もちろん、SQLの構文に合わないものは作れない。
構文解析しながら、シコシコ作るしかないんでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-29 00:20
何となく要件はわかりましたが、
対応すべきRDBそれぞれに対したSQLの構文解析ルーチンを作成して、
シンタックスツリーの作成機能を実装する必要がありそうですね。

JavaCCやSableCCやNotavaCC等のコンパイラコンパイラを使用して、
構文定義ファイルから構文解析機を作成すれば、
そんなに難しくはないかなと思います。

って言っても、実際には難しいのですが、
有名なコンパイラコンパイラでは、
SQL等の構文定義ファイルが存在していますので、
それをベースに改造するのが早いし便利だと思います。

何だかんだで一番大変なのは、
各RDB用の構文ルールを解析する事ではないでしょうか。
いしと
会議室デビュー日: 2005/06/29
投稿数: 11
投稿日時: 2005-10-29 02:07
引用:

かつのりさんの書き込み (2005-10-29 00:20) より:
何だかんだで一番大変なのは、
各RDB用の構文ルールを解析する事ではないでしょうか。



各RDB用のSQL文の構築は、Java<-->SQL文の部分で吸収しようと考えてます。
元から完全なSQL文の構築は無理だと思ってますので、制限を設けて極々標準的な構文を構築できればと思ってます。
少なくとも副問い合わせは、不要です。
条件部分が、 A > 10 and B > 5 とかだと楽なんですが、 (A - B) > (C + D…) みたいなのになると、もう訳わかりません。
言語解析の経験なんて皆無ですから…
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-29 09:57
データモデリングツールやORマッピングフレームワークでは、
SQL<-->Javaの相互変換をサポートしているのは少ないですね。

私も以前データベース管理システムを仕事で作った事がありますが、
SQL直接入力モードがありました。
ただし、SQL直接入力の場合は解析処理を一切行わなわず、
SQL直接入力モードとSQLオブジェクト構築モードを完全に分けていました。

ちなみに、C-JDBCというオープンソースの異種RDBMS間のクラスタを行うものがあります。
例えばORACLEとPostgreSQLに対して同じSQLを実行することができます。
同じSQLが実行できる代わりに、各RDBMS固有の命令・関数は使用できなくなっています。
このSQLエンジンのソースを解析すれば、実現しやすくなるかもしれませんね。

1

スキルアップ/キャリアアップ(JOB@IT)