データベースの作成
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へ登録できると、出来ることがぐっと広がるな。