0

現在、データベースをOracleからMySQLに移行しています。私は主にJavaを使用して、JDBCを使用してデータベースにクエリを送信します。移行の過程で、Javaコードのクエリの多くを変更する必要があります(クエリはハードコードされています)。MySQLでは機能しないためです。

問題が発生した場合にデータベースを簡単に切り替えることができるように、クエリを再コーディングできるようにしたいと考えています。すべてのクエリを標準SQLに変更していますが、これが不可能な領域があります。Oracle用とMySQL用の2つのバージョンのクエリを用意して、両方を切り替えることを考えています(MySQLがニーズに対応できるかどうかを確認するために、一時的に2つのバージョンを用意します)。しかし、これはひどい考えのようです-誰かがこれを行うためのより良い方法について何かアドバイスがありますか?

4

3 に答える 3

3

たくさんのオプションがあります。

まず、多くの人がオブジェクトリレーショナルマッピング(ORM)ツールを使用してアプリケーションをSQLデータベースに接続しています。これらにはさまざまな種類があり(Hibernateが人気です)、非常に少ないコストでデータベースを切り替えることができます。ただし、学習曲線はかなり急です。経験の浅い開発者は、ORMアプリケーションのパフォーマンスの問題に苦労することがよくあります。

「従来の」JDBCを使用する場合は、JavaコードからSQLの本体を取り出して、リソースのように扱うことをお勧めします。Henryが示唆しているように、プロパティファイルを使用し、パラメータプレースホルダー(Springテンプレートを使用して理想的には名前付きプレースホルダー)を使用できます。これにより、特定の機能のコードが2つのファイルに分散されますが、SQLをすばやく改良して新しいバージョンをテストするのは簡単です。

于 2012-12-28T10:32:14.237 に答える
0

1つの可能性は、クエリをプロパティファイルに保存することです。Oracle用とMySql用に1つずつあります。

于 2012-12-28T10:20:33.793 に答える
0

追加する必要があります-ORMは良いアドバイスであり、機能します...新しいアプリケーションから始めて、ドメインモデルで機能するようにアプリケーションを設計できる場合。

ただし、この場合、多数のSQLクエリを呼び出す既存のアプリケーションがあります。ORMベースのクエリ(HQL、JPQL)はSQLにうまく変換されます。SQLは定義上ORMレイヤーに変換されませんが、データへのよりオブジェクト指向のアプローチにするために大きな変更が必要になります。

ORMレイヤーで作業する場合でも、問題は解決しません。たとえば、MySQLとOracleの間には、主キーの生成方法にすでに大きな違いがあります。MySQLは、Oracleがシーケンスを使用する場合に自動番号付けを使用します。おそらく、ORMレイヤーコードにリバースエンジニアリングする必要がある既存のデータモデルがすでにあるでしょう。クロスデータベースコードにはなりません。

于 2012-12-28T13:15:13.810 に答える