2011-02-09 5 views
2

JDBCは、異なるRDBMSまたは同様のデータストアに接続するために使用されるAPIを提供します。しかし、データストアは実装が異なります(SQLの方言など)。RDBMSの抽象化レイヤとしてJDBCを使用できますか?

私のクエリと文が最も一般的なRDBMS(Oracle、PostgreSQL、SQL Server、MySQLなど)で動作するようにJDBCを使用できますか?

質問は二つの側面で私にとっては興味深いです: *共通SQL(INSERT、UPDATE、などを選択) *へのアクセスメタデータ(表と列に関する情報を取得)

私は現在で実験しています自己記述された永続性フレームワークであり、その下にJDBCデータストアをプラグインする必要があります。だから、もし私がJDBCデータストアアダプタを書いたら、それが最も一般的なRDBMS上で動作するならばいいでしょう。事前

答えて

2

これは2つの全く異なる目的を果たすため不可能です。

JDBCは、DBMS 通信プロトコルの抽象であり、SQLはクエリ言語です。

SQLで書かれたクエリは、その通信プロトコルを使用してサーバに送信され、クエリの結果はそのプロトコル(DBMSに依存しない方法で)に返されます。

JDBC APIは、サーバー(または結果)からメタデータを取得するための呼び出しも指定するため、通信プロトコルとクエリの間に曖昧な線があるようです。しかし実際には、ドライバーは、適切と思われる交通手段を自由に使用することができます。必ずしもSQLクエリである必要はありません。

5

JDBC

おかげで RDBMSのための抽象化層です。

あなたの疑問にお答えしましたが、抽象はリークありです。

すべてのRDBMSに共通のSQLとメタデータの小さなサブセットに固執すると、問題ありません。しかし、実際には、はすぐにこれらの制限を超える可能性が非常に高いです。

1

JDBCが行う同程度のSQLへのRDBMSの抽象化として機能します。基本的なクエリが十分に互換性がありますが、あなたは常に唯一のベンダー固有の機能を使用して実装することができる要件にぶつかる:

  • 自動インクリメント列
  • ページング
  • 国際
関連する問題