投稿日:2021年3月5日
更新日:2021年3月4日
Dataアクセスをマルチ化してほしい!!
前回、MySqlから、SqlServerへの切替を行いました♪
納品も終わって、安心していると!!
お客様から・・・。
『データベースのアクセスは、2つある場合があるのよね~!!』っと!
確かに、私も3つまでのDBアクセスは経験したことはあるけど、
今回は、いらないかと~www^^;
再度聞いてみると!
『今回のプロジェクトは、問題ありません』との回答!
回答は、聞いたので、今のままでも問題ないが・・・。
- データベースのアクセスは、一元化し、全てクラスで行った。
- ということは、PGが増えてくると、直すのも大変になる?
- 現状のPGに影響は?
- でも、業務を考えると、これって一般的にあり得るはず!
- 業務アプリ+パッケージ(会計ソフトなど)の連携
- この時点で、2DBになる。
- 業務アプリ+パッケージ(会計ソフトなど)の連携
- 私が作ったクラス的にどうよ!
はぁ~。
これは、やるしかなさそうですね~www^;
ということで、開発着手ですね!
まずは、手順と変更規約みたいなものを整理
- 出来るだけ現状PGの変更がないようにする。
- Sqlクラスは、複数のDBに対応したのでOK(前回)
- やり方は!(悩みながら・・・)
- 今のDB接続を基本DBとする。(デフォルトみたいな!)
- 現在DBアクセスは、クラス化しているので、Newでいけそう。
- 問題は、前回作ったSQLクラスに解るようにすることが必要。
こんな感じかな!
では、実行~!!
DBアクセスのクラスを眺める。
JavaからのDBアクセスは、別ファイルで管理しているなぁ~。
運がいいことに、前回のMySqlのDB記述も残っていますね♪
ということは、DB接続文字列は問題なくとれるので、それを配列にするがベスト!
後は、前回作成したDBタイプと関連付けと行った配列があれば、何とかなるかな!
さて、変更しますか!
まずは、Enumを変更!
/** データベース名 */
public enum DB群{
/** デフォルトDB */ xxx_Default ("mssql"),
/** 連携用DB */ xxx_MySql ("mysql"),
;
private final String val;
private DB群(final String val){ this.val = val; }
public String getVal(){ return this.val; }
}
これで、基本DBは、Enumで解るのはず!
後は、DBタイプとの連携!
this.Db情報 = new LinkedHashMap<>();
this.Db情報.put(DB群.xxx_Default.getVal() ,Db情報.SqlServer);
this.Db情報.put(DB群.xxx_MySql.getVal() ,Db情報.MySql);
this.eDBタイプ = this.Db情報.get(DB.getVal());
こんな感じかな!
DBアクセス情報を変えて!
SQLクラスの情報を渡す!
情報がない場合は、全てデフォルトのDBにてアクセス!
あれ?
出来たかも(笑)♪
勿論テストは必要です。
さて、まずは、基本テスト!
PGの修正をしないで、動作確認!
おっ!
きちんと、デフォルトのDBでアクセスしてるではないか♪
次は、デフォルトのDB(SqlServer)アクセス中に、MYSQLにアクセス!
ちょこっと、PGを変えて、アクセスしてみる!
Dataアクセスクラス 変数A = new Dataアクセスクラス(DB名);
SQLクラス 変数B = new SQLクラス (Dataアクセスクラス );
SQLクラス.Clear();
実行して、確認もOK♪
きちんとSQLクラスもMYSQLのSQLになっている♪
さらに、既存PGにも一切影響なし♪
今回は、全てOKですね♪
残っている懸案
分類 | 懸案 | 結論 | 完了 |
---|---|---|---|
java | throws ServletException, IOException | ||
今回のまとめ
今回は全て問題ありませんでしたが、
構想を考えるのが、一番大変でした(笑)
PostgreSQLも、ついでに対応しました(笑)