JSPのMYSQL接続
(1) ディレクトリ構成
$ tree test02 test02 ├── META-INF │ └── context.xml └── test02.jsp 1 directory, 2 files(2) テーブルとデータ
$ mysql -unaoki -p sampledb
Enter password:
mysql> create table foods(
-> code varchar(8) PRIMARY KEY,
-> name varchar(100),
-> price integer,
-> index(price)
-> ) engine=InnoDB;
Query OK, 0 rows affected (0.12 sec)
mysql> insert into foods values('000001','りんご',398);
Query OK, 1 row affected (0.03 sec)
mysql> insert into foods values('000002','みかん',480);
Query OK, 1 row affected (0.04 sec)
mysql> insert into foods values('000003','柿' ,450);
Query OK, 1 row affected (0.04 sec)
mysql> select * from foods;
+--------+-----------+-------+
| code | name | price |
+--------+-----------+-------+
| 000001 | りんご | 398 |
| 000002 | みかん | 480 |
| 000003 | 柿 | 450 |
+--------+-----------+-------+
3 rows in set (0.00 sec)
(3) コンテキストファイルコネクションプールはDBCPとJDBCという2つの仕組みが提供されているらしい。TOCAT7ではデフォルトはDBCPらいしいが、切り替えるには、factory で指定できるらしい。jndi の定義は、本来は tomcat7/conf 配下の context.xml で設定するべきだと思うのだが、アプリケーション単位に設定できる。全く同じ jndi名で片方のアプリケーションがコネクションプールを使いきっても、もう一方のアプリケーションが独自に context.xml を使っていれば影響はなかった。サーバー管理としては、一箇所で管理したいところだとは思うが、個別にアプリをテストする時には便利な仕様である。
$ cat test02/META-INF/context.xml
<Context>
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="naoki"
password="password"
driverClassName="com.mysql.jdbc.Driver"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
url="jdbc:mysql://localhost:3306/sampledb"/>
<!-- factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" -->
</Context>
(4) JSPファイル
$ cat test02/test02.jsp
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%@page
import="java.sql.*,
javax.sql.*,
javax.naming.InitialContext,
javax.naming.Context"%>
<title>JSPテスト</title>
</head>
<body>
<%
InitialContext initctx = new InitialContext();
DataSource ds = (DataSource)initctx.lookup("java:comp/env/jdbc/TestDB");
Connection cn = ds.getConnection();
Statement stmt = cn.createStatement();
ResugtSet rs = stmt.executeQuery("select * from foods;");
%>
<h1>果物一覧</h1>
<table>
<tr>
<th>code</th>
<th>名前</th>
<th>値段</th>
</tr>
<% while(rs.next()) { %>
<tr>
<td>
<%= rs.getString("code") %>
</td>
<td>
<%= rs.getString("name") %>
</td>
<td>
<%= rs.getString("price") %>
</td>
</tr>
<%
}
cn.close();
initctx.close();
%>
</table>
</body>
</html>
(5)TOMCATへ配備
$ cp -rp test02 ~/tomcat7/webapps(4)実行結果

0 件のコメント:
コメントを投稿