satoshiabe.jp : Java Notes

HOME > DOCUMENTS > PROGRAMMING > Java > Java Notes

Java Notes

Updated : 2006/07/28
Created : 2006/07/21

Preface

Connection to PostgreSQL using JSP/JDBC

Links

Preface

Java の様々なメモ

Connection to PostgreSQL using JSP/JDBC

JSP から PostgreSQL に接続するコードのメモ。 コンテナに Apache Tomcat の 5.0 系を、JDK に 1.5 系を、PostgreSQL に 8.0 系を使用している。 Apache Tomcat や JDK や PostgreSQL のインストールを、このサイト内の別のページで解説しているため、このページでは省略する。

JDBC driver

JDBC driver を適切なディレクトリに配置する。

# cp postgresql-8.1-407.jdbc3.jar /usr/local/tomcat/common/lib/

データベースを作成する

% su - # su - postgres % createdb sample_db01 -- encoding="UTF8"

テーブルを作成する SQL

% psql # \c sample_db01 # CREATE TABLE staff ( id SERIAL primary key, f_name TEXT NOT NULL, l_name TEXT NOT NULL, age INTEGER NOT NULL );

サンプルデータ

INSERT INTO staff (f_name, l_name, age) VALUES ("Ichiro", "Yamada", 30); INSERT INTO staff (f_name, l_name, age) VALUES ("Jiro", "Yamada", 25); INSERT INTO staff (f_name, l_name, age) VALUES ("Saburo", "Yamada", 20); INSERT INTO staff (f_name, l_name, age) VALUES ("Shiro", "Yamada", 15); INSERT INTO staff (f_name, l_name, age) VALUES ("Goro", "Yamada", 10);

SELECT

pageEncoding を省略した場合、contentType がセットされる。

######################### ### HTTP のヘッダ情報 ### ######################### <%@ page contentType="text/html; charset=EUC-JP" pageEncoding="EUC-JP" %> ############################### ### import を忘れないこと! ### ############################### <%@ page import="java.sql.*" %> ################### ### html の開始 ### ################### <!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=euc-jp" /> <title>sample</title> </head> <body> ################## ### JSP の開始 ### ################## <% Connection con = null; Statement stmt = null; ResultSet rs = null; String dbname = "sample_db01"; String dbuser = "admin"; String dbpasswd = "admin"; try { ### JDBC ドライバを使用してデータベースに接続するため、 ### 特定のドライバクラスをアプリケーションの JVM にロードする。 Class.forName("org.postgresql.Driver"); ### 指定するデータベースに接続するよう DriverManager クラスに指示する con = DriverManager.getConnection("jdbc:postgresql:" + dbname, dbuser, dbpasswd ); ### 実行する SQL statement を String クラスの変数 sql にアサインする String sql = "SELECT * FROM sample_table"; ### 直接 java.sql.Statement クラスのインスタンスを生成できないため、 ### createStatement() を呼び出して Statement オブジェクトを取得する。 stmt = con.createStatement(); ### SQL を実行して結果を rs にアサインする。 rs = stmt.executeQuery(sql); ### ResultSet.next() で結果を 1 行ずつ取り出す。 while(rs.next()) { out.println(rs.getInt("id")); out.println(rs.getString("f_name")); out.println(rs.getString("l_name")); } ### ドライバロードのエラー処理 } catch(ClassNotFoundException e) { out.println(e.getMessage()); ### 接続取得のエラー処理 } catch(SQLException e) { out.println(e.getMessage()); ### 接続資源の解放 } finally { try { ### データベースから切断する if (con != null) con.close(); } catch (SQLException ignored) { } } %> </body> </html>

INSERT

INSERT statement の例。 SELECT statement の例と重複している部分のコードは省略されている。 この JSP ファイルに POST されてきたデータを取得して、その値をもとに INSERT する例を考えてみた。

<% ### getParameter() により POST されてきた値を取得する。 String f = request.getParameter("f_name"); String l = request.getParameter("l_name"); String a = request.getParameter("age"); try { . . . ### INSERT statement をアサインする。 String sql = "INSERT INTO staff (f_name, l_name, age) VALUES('"+ f +"','"+ l +"','"+ a +"')"; ### これは同じ。 stmt = con.createStatement(); ### SQL statement を実行する。 ### executeUpdate() は、今回の SQL statement で変更された行の数を返す。 int count = stmt.executeUpdate(sql); ### boolean type を返す execute() も存在する。 boolean b = stmt.execute(sql); . . . %>

Links

Java Technology (sun.com)

Email to Satoshi ABE