Hello, PostgreSQL Servlet! - ReDo

2010年10月28日

Hello, PostgreSQL Servlet!

動いてるものをちょっと覗くか、MySQLばっかりだったので、PostgreSQLを触ってみました。

    1. Windows (XP 32bit)にインスコ。
    2. psql(CUIなコマンドラインツール)からSQL文でデータ入力。
    3. ServletからJDBCでDBに触ってみる。

目的別ガイド:インストール編
http://lets.postgresql.jp/map/install/
EnterpriseDB社というところでwin版はメンテナンスされているらしい。
http://www.enterprisedb.com/products/pgdownload.do#windows

・インストーラ起動。
・データ置き場をC:\pgdata\9.0\に変更。
・ユーザpostgresのパスワードを適当に設定。
・portは5432そのまま。
・Localeは"C"を設定。
・セキュリティソフトに怒られることがあるので対応。

CUIツールはpsqlというらしい。
http://lets.postgresql.jp/documents/tutorial/psql/1
http://www.postgresql.jp/document/9.0/html/

C:\Program Files\PostgreSQL\9.0\binにパスを通しておこう。

PostgreSQLをコマンドラインで操作する
http://www.atmarkit.co.jp/flinux/rensai/postgres02/postgres02.html

> psql -U postgres
←パスワードを入力
postgres=#

クライアントのencodingはデフォルトはUTF-8なので(コマンドプロンプトが文字化けしたので)変更。

\encoding SHIFT_JIS
create table test ( id int, name text );
insert into test (id,name) values (1,'太郎');
insert into test (id,name) values (2,'花子');
insert into test (id,name) values (3,'次郎');
insert into test (id,name) values (4,'良子');
SELECT * FROM test;
SELECT name FROM test;
SELECT * FROM test WHERE id='1';
SELECT * FROM test WHERE name LIKE '%子';
\q

だいたいおk。

次はJavaプログラム側。 一応今回の勉強した成果の最終ターゲットは鯖側だった気がするのでServletにする。

package test.servlet.postgres;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Hello
 */
public class Hello extends HttpServlet {
	private static final long serialVersionUID = 1L;

	private static final String DRIVER_CLASS = "org.postgresql.Driver";
	private static final String JDBC_URL = "jdbc:postgresql:postgres";
	private static final String DB_USER = "postgres";
	private static final String DB_PASSWORD = "XXXX";

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public Hello() {
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter writer = response.getWriter();
		writer
				.println("Hello Postgres Servlet");
		writer.println("

Hello, Postgres Servlet!

"); Connection con = null; Statement stmt = null; try { // ドライバクラスロード Class.forName(DRIVER_CLASS); // DBコネクション取得 con = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASSWORD); // SQL文実行 stmt = con.createStatement(); String sql = "SELECT * FROM test"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); writer.println("id=" + Integer.toString(id) + " name=" + name + "
"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); stmt = null; } if (con != null) { con.close(); con = null; } } catch (Exception e) { // } } writer.println(""); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

http://localhost:8080/PgServlet/Hello
にアクセス。

ClassNotFoundException発生。
jdbcがみつからないよと言うのでWebContent\WEB-INF\lib\にpostgresql-8.4-701.jdbc4.jarをコピー。

hello_postgres_servlet.jpg

おk。

コメントする