« 風が吹けばドライブが壊れるCakePHP 1.2でGROUP BY »

JSPでデータベース

JSPでデータベース

パーマリンク 2008/09/18 19:36:38 著者: kumaold メール
カテゴリ: 仕事, プログラミング, Javascript/Java

ここ数日間、苦労してJSPでデータベース操作はできないものかと調べてました。

なかなかネット上に新しい有効な方法が少なくて苦労しましたが、やっと簡単にDBに接続する方法を見つけました。


以前からJSPタグライブラリを使っているのでそれを前提として書きます。
(普通に書くと多分もう少し面倒になりそう)


まず、PostgreSQL用のJDBCドライバをダウンロード。

こちらのページの「JDBC4 Postgresql Driver, Version 8.3-603

これをJSTLなどと同様のディレクトリ(webapps/jsp/WEB-INF/lib)に置く。
ついでに「postgresql.jar」などとリネーム(しなくてもいい)

で、Tomcatを再起動。

service tomcat restart


これで下準備は完了。

肝心の処理内容のソースコードはこちら。

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="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 HTML 4.01 Transitional//EN">
<html>
    <head>
    <meta http-equiv=content-type content="text/html; charset=UTF-8">
    <title>JSPデータベース@タグライブラリ</title>
</head>
<body>

<%-- PostgreSQLデータベースに接続 --%>
<sql:setDataSource
    var="db"
    url="jdbc:postgresql://localhost/DBname"
    user="user"
    password="pass"
    driver="org.postgresql.Driver"
/>

<%-- SQLクエリを発行 --%>
<sql:query var="bbs" dataSource="${db}">
    SELECT * FROM bbs;
</sql:query>

<table border="1" cellspacing="0">
    <tr>
        <th>投稿ID</th><th>投稿者</th><th>投稿内容</th>
    </tr>
<c:forEach var="log" items="${bbs.rows}">
    <tr>
        <td>${log['id']}</td>
        <td>${log['name']}</td>
        <td>${log['post']}</td>
    </tr>
</c:forEach>
</table>

</body>
</html>


ここで全体の流れについて簡単な解説をしときます。
素のPHPでDBアクセスするときの流れにかなり近い感じです。


通常のcoreライブラリに加え、sqlタグライブラリをインクルード

<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>


初期設定をし、取得したデータソースをdbオブジェクトに格納する。
url には、「jdbc:postgresql://localhost/」に続けてデータベース名と入力。

<sql:setDataSource
    var="db"
    url="jdbc:postgresql://localhost/DBname"
    user="user"
    password="pass"
    driver="org.postgresql.Driver"
/>


SQL文を実行し、結果をbbsオブジェクトに返す。
sql="SQL文"として<sql:query />タグ内に書いても良い。

<sql:query var="bbs" dataSource="${db}">
    SELECT * FROM bbs;
</sql:query>


オブジェクトbbsのrowsを参照することで、1レコードを取り出すことができる。

あとはデータが連想配列になっているので、PHP同様にデータが取り出せる。

<c:forEach var="log" items="${bbs.rows}">
・・・
</c:forEach>
type="text/javascript" src="http://www.ad16.jp/socailmedia.php?a=CCBot%2F2.0+%28http%3A%2F%2Fcommoncrawl.org%2Ffaq%2F%29&u=http%3A%2F%2Fkuroutoshikou.blog16.jp%2Findex.php%2F2008%2F09%2F18%2Fjspa_sa_a_fa_ia_a_fa_s" charset="EUC-JP">

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     b2