感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

【プログラミング 25時間目】Webアプリケーションのデプロイ、JDBCによるDBへの接続など。

スポンサーリンク

基礎からのサーブレット/JSPのChapter26「JDBCを使う」の勉強。
「パーフェクトJava」もわかりやすかったが、やはり基礎はこちらの本がいい。
カーソルの説明までしてくれる本はなかなかなかったから。

良い本に出会えるのは幸せなことだ。
ドットインストールとかも素晴らしいサイトだと思うけど、やはり書籍の方が早くて効率良く学べるんだよね。
俺が目で読んで理解するタイプだからだと思うけど。
だから、良い本に出会えたときはすごく嬉しい。

★★

デプロイ(deploy)とは、アプリケーションサーバにWebアプリケーションをインストールすること。日本語訳で「配備」と呼ばれることがある。

Webアプリケーションを作成、実行するまでの手順でJavaEE標準の方法は以下の流れになる。

①必要なファイルの作成

②パッケージング
→作成したファイルをWARファイルにパッケージングすること。
WARはWeb Application Resourcesの略。Webアプリケーションに必要なファイルを一つのファイルにまとめて圧縮したもの。
WARファイルの圧縮形式はJARやZIPと同じなので、WARファイルはJDKのJARコマンドやZIPの圧縮ツールなどを利用して作成できる。

③デプロイ
→作成したWARファイルをアプリケーションサーバに配置する手順のこと。
デプロイの方法はアプリケーションサーバによって異なる。

web.xmlサーブレット/JSP標準の設定を行う
コンテキストファイル→Tomcat独自の設定を記述する。

JDBCJavaからRDBにアクセスするためのAPIRDBの操作を行うために必要なクラス群が格納されている。
JDBCAPIは単なるインターフェースや共通クラスの集まりなので、これだけでは個々のデータベースにアクセスすることはできない。
実際にアクセスするためにはJDBCドライバが必要になる。


Class.forName()メソッドとは?
引数に指定した名前のクラスをロードして返すメソッドのこと。
クラスは最初にロードされる時にstaticイニシャライザが実行される。

以下の例のHSQLDBのjdbcDriverクラスではstaticイニシャライザは以下のようなコードになっている。

static {
   try{
       DriverManager.registerDriver(new jdbcDriver());
   } catch (Exception e) {}
}

Class.forNameメソッドを利用すると、JDBCドライバの実装に依存しないコードが記述できる。

JavaでDBに接続するサンプル

package dbsample;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBManager {
	
	public static Connection getConnection() {
		try {
			//Class.forName()はクラス名を指定してクラスをロードするメソッドで、引数にはJDBCドライバの完全クラス名を指定する。
			Class.forName("org.hsqldb.jdbcDriver");
			
			//データベースと接続するConnectionオブジェクトを取得する。
			//jdbc:hsqldb:hsql://localhost→JDBCのURL
			//"sa"はユーザ名、その次の空の引数はDB接続のパスワード
			Connection con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost","sa","");
			return con;
		} catch (Exception e) {
			throw new IllegalStateException(e);
		}
	}
	
	public static void main(String[] args) throws Exception{
		Connection con = getConnection();
		System.out.println("con=" + con);
		Statement smt = con.createStatement();
		
		//UPDATE文の実行
		int count = smt.executeUpdate("UPDATE ACCOUNT SET MONEY=5000");
		System.out.println("update count : " + count +"\n");
		
		//SELECT文の実行
		Statement smt2 = con.createStatement();
		ResultSet rs = smt.executeQuery("SELECT * FROM ACCOUNT");
		
		while(rs.next()) {
			System.out.println(
					"ID=" + rs.getString("ID") 
					+ ",TITLE=" + rs.getString("NAME")
					+ ",PRICE=" + rs.getInt("MONEY"));
		}
		
		smt.close();
		con.close();
	}
}

ジム行ってきます。
帰ったらまた続きの勉強します。

100時間やったら適当に自作アプリを作ろうかな。