2
3

More than 3 years have passed since last update.

【Java】H2DB・JDBCの関係

Posted at

H2 Database特徴

  • H2のメリット
    • Javaのプログラムに組み込めること
    • Embedded and server modes; in-memory databases

The main features of H2 are:
- Very fast, open source, JDBC API
- Embedded and server modes; in-memory databases
- Browser based Console application
- Small footprint: around 2 MB jar file size

H2 Derby HSQLDB MySQL PostgreSQL
Pure Java Yes Yes Yes No No
Memory Mode Yes Yes Yes No No
Encrypted Database Yes Yes Yes No No

H2 Database Engine より

  • Pure java:Javaで作られてる
    • ex: H2/Derby/HSQLDB
    • 自分のアプリケーションに埋め込めるのでアプリ起動時に自動で立ち上がる
    • Embedded / server modes / in-memory databasesの3つのモードが使える

server modes

  • h2サーバ立ち上げてたら他のサーバからもアクセスできる

in-memory databases modes

  • インメモリで動かす
  • Java仮想マシン上のJavaプログラム内でh2.start();で起動
  • インメモリはDataをインサート文でSQL文でデータを吐き出した時に、HDDや外部にデータが保存されずメモリ上に保存される
    • 再起動で消える
    • メモリの中にしかないので他のサーバから見れない
  • インメモリでは次回に起動した時にDBもクリアになっているので開発ではよく使う!

Embedded modes

  • in-memory同様、Java仮想マシン上のJavaプログラム内で動く
  • データは外部にHDD/SSD保存
    • 外からアクセスできる
    • クラッシュしてもデータ残ってる
  • DBのユニットテストするときにDB更新かけてしまうと同じユニットテストできない

H2とJDBCの関係

4.png

  • 従来はDBに対してApplicationからオラクルなどDB固有のライブラリを使って直接アクセスすることが多かった(C++でOracleLibを使うなど)
  • この方法ではDBを自由に変更、製品を組み替えできない (Oracle版とかMySQL版とかにできない)
  • →JavaではJDBCが解決!
  • DBアクセス基本

    • JDBC:SQL抽象化メカニズム
    • 直接Oracle叩くのではなくJDBCのjdbc_urlを元に指定先のDB (Oracleなど)にアクセス
    • オラクルのライブラリをJDBCがアクセスしRDBにアクセスことで一段抽象化する
    • jdbc_urlを読んでh2と書いてる場合、JDBCはh2のライブラリを通してH2DBにアクセス
  • アプリとRDBが直接結合(密結合)だったのが、JDBC(抽象化モジュール)を介することで、アプリとRDBが間接的になる!(疎結合になる)

    • アプリはDBが何であるかに関与する必要なく、URLでどこにアクセスすればいいかのみ知っていればいい(JDBCがURLでDBにアクセス)
  • RDBが何であってもアプリ側で変更不要でJDBCがいい感じにやってくれるということ!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3