Java学習 jsp/Servletとデータベースについての学習

jsp/Servletの学習をたくさんの人に助けてもらいながら続けています。

いよいよデータベース連携だ!!となったのですが、色々と新しい言葉が登場したため、noteと物理的なノート両方にまとめたいと思います。

[JDBC]

Java Database Connectivity(直訳:Javaのデータベースの接続性)のことです。

JDBCAPIとドライバがあります。

MySQLならMySQLの、H2DBならH2DBのJDBCドライバを入れてJDBCAPI越しに操作をしているイメージ。
使用するデータベースが何であっても、JDBCAPIを通して使うので同じように使うことができます。

[DriverManagerとDataSource]

DBに接続するには、java.sql.Connectionクラスのインスタンスを取得する必要があります。

DriverManagerで書くと、
Class.forName("JDBCのクラス名");
Connection con = DriverManager.getConnection
("接続文字列" , "userID" , "password");
※JDBCのクラス名は使用しているJDBCドライバのもの。
のように、わりとわかりやすくかけるのですが、DBへのアクセスに使う情報をソースコードにまるまる書いてしまう事、変更がかかった際全部のソースを変更する必要があるというデメリットがあります。

また、DBに接続しSQLを発行した後必ずデータベースから切断してConnectionオブジェクトを破棄する必要があります。
操作の度に接続→破棄を繰り返すのは、パフォーマンスが悪い(らしいです)ので現在はDataSourceの方でつないだ方がいいのでは?と言われています。

DataSource オブジェクトを JNDI ネーミングサービスに登録する方法には、DriverManager を使用する方法と比べて、主に 2 つの利点があります。第 1 に、アプリケーション内にドライバ情報をハードコードする必要がありません (DriverManager ではそうする必要があります)。プログラマは、目的のデータソースに対する論理名を選択し、その論理名を JNDI ネーミングサービスに登録することができます。アプリケーションは論理名を使用し、JNDI ネーミングサービスはその論理名に関連付けられた DataSource オブジェクトを返します。その DataSource オブジェクトを使えば、それによって表現されているデータソースへの接続を作成できます。

2 つ目の主な利点は、DataSource 機構を使えば、開発者は接続プールや分散トランザクションなどの機能を活用した DataSource クラスを実装できる、という点です。接続プールを使えば、パフォーマンスが大幅に向上します。なぜなら、接続が要求されるたびに、新しい接続を物理的に作成する代わりに既存の接続を再利用するからです。分散トランザクション機能を使えば、アプリケーションは、大企業の負荷の高いデータベース処理を実行できるようになります。

https://docs.oracle.com/javase/jp/1.5.0/guide/jdbc/getstart/datasource.html

DataSourceのメリットは引用文に書いてあるのですが、ソースに直接接続情報を書かなくて良いので管理が楽、コネクションプールの仕組みを使えるのでパフォーマンスが上がります。ということ(らしい)です。

[コネクションプールとは?]

コネクションを複数保持(プーリング)している状態を保つこと。
システムによるようですが、どこかのタイミング(起動やリソースへのアクセス)でコネクションを複数保持しておき、システム終了のタイミングまで保持し続ける。

DBにアクセスするとき、プログラムは自動的にコネクションプールの中のコネクションの1つを使い、操作終了後コネクションをコネクションプールに戻します。
(接続→切断を繰り返さず、接続を再利用する。)

疑問点としては、コネクションプールはつまるところ繋ぎっぱなしな状態のコネクションを複数用意することなのかな?という点ですね。
この点について調べると、データベース←1→データプロバイダ←2→プログラムの2の部分だけがプログラムによって閉じられる部分だよという説明がありました。データプロバイダだけはデータベースへのアクセスを保持し続けて、プログラムはデータプロバイダに許可をもらえばすぐアクセスできるということでしょうか。

[ResultSetクラスのnext()メソッド]

これはデータベースというより、ある特定のメソッドの特徴ですね。

次の行を見ているのと同時にカーソルをあてているらしい。

ちなみにデータベースにおけるカーソルとは、
データベースにおけるカーソル(Cursor)は、一連のデータに順にアクセスする際の検索条件および「現在位置」を保持するデータ要素である。

以上、本格的な掲示板作成に入る前にまとめてみました。

間違っている部分もあるかもしれませんが、深まったと思います。

この記事が気に入ったらサポートをしてみませんか?