0

JDBC がどのように SQL 間のベンダー固有の違いを抽象化し、多くの SQL に対して機能する単一の SQL フレーバーを提示するかについては、誰もが好んで言及します。

しかし、JDBC に関する本や参考文献は、(詳細な) 仕様や、JDBC (の特定のバージョン) によってサポートされるこの SQL のまともなユーザー空間の範囲について言及していません。たとえば、JDBC 4.1 です!

したがって、最終的に (少なくとも私に) 起こることは、MySQL を使用している場合、MySQL リファレンス マニュアルを参照し、MySQL 固有の機能を誤って使用しないようにする必要があるということです。移植可能な SQL を (少なくとも私が使用している JDBC ドライバーのバージョンでサポートされているレベルで) 書く場合、MySQL や PostgresQL などを参照する代わりに、JDBC 仕様または SQL 仕様を直接参照することをお勧めします。

特定のバージョンの JDBC が基づいている SQL 標準自体 (2008、2003 など) は自由に入手できますか? または、コピーを取得するために $$ を支払う必要がありますか?

4

2 に答える 2

4

「JDBC SQL」はなく、ISO SQL とそのベンダー実装だけです。JDBC は、SQL データベースと対話するためのインターフェイスを定義します。これは、クエリ言語自体とは別のレイヤーです。

JDBC 自体のリファレンスは、JSR ドキュメントです。

残念ながら、公式の SQL 標準は高価であり、ISO から購入する必要があります。

適合する実装を他の場所で開発しようとしていない場合は、参照に最適な最終段階のドラフトをここで見つけることができます

SQL 仕様は、最も親しみやすく読みやすいものではないため、実際には、人間が実際に読むことを意図したベンダーのドキュメントを使用することをお勧めします。いくつかのベンダー ドキュメントを比較したり、不明な点が生じたときに標準ドキュメントに頼ることができます。

仕様への標準準拠は、DB 全体で理想的とは言えません。仕様に厳密に従ってコードを記述しても、必ずしも実際に機能するとは限りません。たとえば、MySQL はウィンドウ関数や一般的なテーブル式を実装していません。PostgreSQL は SQL/PSM (PL/PgSQL を提供する代わりに) またはCALLステートメントを実装していません。ほとんどのベンダーは、自動インクリメント列またはシーケンス ジェネレーターを指定するさまざまな方法を使用しています。などなど

w3schools SQL ガイドは使用しないでください。これらは非常に古く、間違っており、ベンダー拡張機能と標準を区別できていないため、通常は使用しないでください。w3schools は検索ランキングで非常に上位に表示される傾向があるため、それらについて言及します。昔は実際に便利でした。

于 2013-06-28T03:46:49.893 に答える
2

JDBC 4.1 仕様はhttp://download.oracle.com/otndocs/jcp/jdbc-4_1-mrel-spec/index.htmlからダウンロードできますが、これは SQL ではなく JDBC 自体のみを対象としています。仕様はインターフェースの説明です。データベースがある程度の SQL 標準をサポートすることを期待していますが、クエリの要件に関しては、SQL 標準への参照以上の情報が見つかるとは期待していません。

SQL 標準はありますが、データベース ベンダーはそれらを文字どおりに実装していないため、通常はとにかくデータベース固有の SQL を使用する必要があります。JDBC 自体はギャップを埋めるためにいくつかのエスケープを定義していますが、私の知る限り、それらはほとんど使用されていません。また、データベースが標準 SQL をサポートしていない場合、ドライバーは通常、標準 SQL をデータベース固有の SQL に変換しません。

公式の SQL 標準を見たい場合は、ISO または国別の ISO 担当者から購入する必要があります。とはいえ、検索を行うと、仕様のドラフト版を無料で見つけてダウンロードできます。SQL標準ドキュメントはリファレンスマニュアルとして意図されたものではなく、正式な説明であり、実装者にのみ関連する詳細を非常に深く説明することを意図しているため、それがどれほど役立つかはわかりません.

于 2013-06-27T10:47:38.377 に答える