転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【Java】JavaとDBへの連携を復習

データベースの作成

RDBMSは、H2を使います。
JDBC URLのことをすっかり忘れていたのでおさらい。
JDBC URL」に設定するのは、接続文字列。

接続文字列について
jdbc:h2:tcp://localhost/~/baseball
h2 = サブプロトコル
tcp://localhost/~/baseball = サブネーム
localhost = ホスト名
~(ユーザのホームフォルダ) = データベースの保存先
baseball = データベース名
uuc1h.hatenablog.jp

テーブルの作成

create table pitcher (
    id int  auto_increment primary key,
    league char(15) not null,
    team char(3) not null,
    hand char(6) not null,HAND NAME 
    name varchar(50) not null
);

ちなみにテーブルの削除クエリは以下

drop table pitcher if exists;

JavaとDBの接続

JDBCドライバは、以下に配置。
WebContent / WEB-INF / lib / h2-1.4.194.jar

context.xmlは、以下に配置。
WebContent / META-INF / context.xml
context.xmlの中身は、こんな感じ。

<Context reloadable = "true">
	<Resource
		name="jdbc/baseball"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName="org.h2.Driver"
		url="jdbc:h2:tcp://localhost/~/baseball"
		username="sa"
		password=""
	/>
</Context>

context.xmlに設定を行えるのは、データソースを利用しているから。データソースの性さについては、以下参照。
uuc1h.hatenablog.jp

まずは検索機能

テーブルに、仮のデータを入れて、Javaからテーブルの中身を検索する機能を実装した。

// DB接続のためのDAO
public class DAO {

	// DataSourceを保存する変数
	static DataSource ds;

	public Connection getConnection() throws Exception {

		if(ds == null) {

			// InitialContextオブジェクトの取得
			InitialContext ic = new InitialContext();

			// DataSourceオブジェクトの取得
			ds = (DataSource)ic.lookup("java:/comp/env/jdbc/baseball");

		}

		// コネクションを返却
		return ds.getConnection();

	}
}
// 検索用のDAO
public class PitcherDAO extends DAO {

	public List<PitcherDto> search() throws Exception {

		// 返却用リストの生成
		List<PitcherDto> list = new ArrayList<>();

		// Connectionの取得
		Connection con = getConnection();

		// SQL文の準備
		PreparedStatement st = con.prepareStatement("select * from pitcher");

		// SQL文の実行
		ResultSet rs = st.executeQuery();

		while(rs.next()) {

			PitcherDto p = new PitcherDto();
			p.setLeague(rs.getString("league"));
			p.setTeam(rs.getString("team"));
			p.setPlayer(rs.getString("name"));

			list.add(p);
		}

		// DBからの切断
		st.close();
		con.close();

		return list;

	}

}
@WebServlet(urlPatterns={"/chapter0225/pitchermanager"})
public class PitcherManager extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		// PrintWriterオブジェクトの取得
		PrintWriter pw = resp.getWriter();

		Page.header(pw);

		try {

			PitcherDAO pDao = new PitcherDAO();
			// 検索の実行
			List<PitcherDto> list = pDao.search();

			// DBからデータの取得
			for (PitcherDto p : list) {

				pw.println(p.getLeague());
				pw.println(p.getTeam());
				pw.println(p.getPlayer());
				pw.println("<br>");
			}


		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace(pw);
		}

		Page.footer(pw);

	}

}

自分なりにDB接続をまとめると
・DataSourceを取得し、コネクションを取得
SQL文を設定し、実行
・DBからの切断
という手順が必要であることを理解した。

続いて、登録機能の実装

public int insert(PitcherDto pDto) throws Exception {

	// Connectionの取得
	Connection con = getConnection();

	// SQL文の準備
	PreparedStatement st = con.prepareStatement("insert into pitcher values (null, ?, ?, ?)");

	// プレースホルダの置き換え
	st.setString(1, pDto.getLeague());
	st.setString(2, pDto.getTeam());
	st.setString(3, pDto.getPlayer());

	// SQL文の実行
	int line = st.executeUpdate();

	// DBからの切断
	st.close();
	con.close();

	return line;

}
@WebServlet(urlPatterns={"/chapter0225/pitcherManager"})
public class PitcherManager extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		// PrintWriterオブジェクトの取得
		PrintWriter pw = resp.getWriter();

		Page.header(pw);

		try {

			// リクエストパラメータをDTOにセット
			PitcherDto p = new PitcherDto();
			p.setLeague(req.getParameter("league"));
			p.setTeam(req.getParameter("team"));
			p.setPlayer(req.getParameter("player"));

			// 登録の実行
			PitcherDAO pDao = new PitcherDAO();
			int line = pDao.insert(p);

			if (line != 0) {

				pw.println("登録に成功しました。");

			}


		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace(pw);
		}

		Page.footer(pw);

	}

}

検索と登録の基本の流れは、押さえたかな。
DBへ登録できると、出来ることがぐっと広がるな。