第9章 データベースへの接続

9.2 JDBCの利用

9.2.1 SQLの実行

Jdbc.jsp

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>JDBCの利用</title>
</head>
<body>

<sql:setDataSource
  var="ds"
  driver="com.mysql.jdbc.Driver"
  url="jdbc:mysql://localhost/mydb?characterEncoding=utf8"
  user="test"
  password="pass" />

<sql:update dataSource="${ds}">
  INSERT INTO samples (sample,memo)
  VALUES ('JDBC TEST','<%=(new java.util.Date())%>')
</sql:update>

</body>
</html>

9.2.2 問い合わせ結果の処理

Select.jsp

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>テーブル内容の表示</title>
</head>
<body>

<sql:setDataSource
  var="ds"
  driver="com.mysql.jdbc.Driver"
  url="jdbc:mysql://localhost/mydb?characterEncoding=utf8"
  user="test"
  password="pass" />
  
<sql:query var="rs" dataSource="${ds}">
  SELECT * FROM samples
</sql:query>

<table>
<tr><th>id</th><th>sample</th><th>memo</th></tr>
<c:forEach var="row" items="${rs.rows}">
  <tr>
    <td><c:out value="${row.id}" /></td>
    <td><c:out value="${row.sample}" /></td>
    <td><c:out value="${row.memo}" /></td>
  </tr>
</c:forEach>
</table>

</body>
</html>

9.3 スクリプトレットでの実装

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>スクリプトレットの利用</title>

</head>
<body>
<%
  Class.forName("com.mysql.jdbc.Driver").newInstance();
  String uri="jdbc:mysql://localhost/mydb?characterEncoding=UTF-8";
  Connection conn = DriverManager.getConnection(uri,"test","pass");
   
  Statement stmt = conn.createStatement();
  String sql="INSERT INTO samples (sample,memo) "
              +"VALUES ('JDBC TEST 2','"+(new java.util.Date())+"')";
  stmt.executeUpdate(sql);
   
  ResultSet rs=stmt.executeQuery("SELECT * FROM samples");
%>

<table summary="Samplesの内容">
<caption>Samplesの内容</caption>
<tr><th>id</th><th>sample</th><th>memo</th></tr>

<%
  while(rs.next())
    out.println("<tr>"
                 +"<td>"+rs.getInt("id")+"</td>"
                 +"<td>"+rs.getString("sample")+"</td>"
                 +"<td>"+rs.getString("memo")+"</td>"
               +"</tr>");
%>

</table>
</body>
</html>

コネクション・プール

コネクション・プールの設定

context.xml (MySQL)

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myweb" docBase="myweb" reloadable="true">
  <Resource
    name="jdbc/mydb"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost/mydb?characterEncoding=UTF-8"
    username="test"
    password="pass"
    removeAbandoned="true"
    removeAbandonedTimeout="10"
    logAbandoned="true"
    maxActive="10"
    maxIdle="10"
    maxWait="10000" />
</Context>

コネクション・プールの利用

SelectPool.jsp

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>テーブル内容の表示(コネクション・プール)</title>
</head>
<body>

<sql:query var="rs" dataSource="jdbc/mydb">
  SELECT * FROM samples
</sql:query>

<table>
<tr><th>id</th><th>sample</th><th>memo</th></tr>
<c:forEach var="row" items="${rs.rows}">
  <tr>
    <td><c:out value="${row.id}" /></td>
    <td><c:out value="${row.sample}" /></td>
    <td><c:out value="${row.memo}" /></td>
  </tr>
</c:forEach>
</table>

</body>
</html>

コネクション・プールの効果

context.jsp (DB2)

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myweb" docBase="myweb" reloadable="true">
  <Resource
    name="jdbc/mydb"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.ibm.db2.jcc.DB2Driver"
    url="jdbc:db2:mydb"
    username="test"
    password="pass"
    removeAbandoned="true"
    removeAbandonedTimeout="10"
    logAbandoned="true"
    maxActive="10"
    maxIdle="10"
    maxWait="10000" />
</Context>