/*
* レベル3 use DB driver (select)
*/
import java.io.*;
import java.util.*;
import javax.servlet.http.*;
import javax.servlet.*;
// DB通信関係のオペレートに必要なクラス群を追加。
import java.sql.*;
public class Level030 extends HttpServlet {
/*** init サービス ***/
public void init(ServletConfig conf) throws ServletException
{
super.init(conf);
}
/*** doGet サービス ***/
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
// 変数宣言
String s_param = "";
String s_result[] = null;// 配列型文字列の宣言。
String sql = "";
Connection connection = null;
PreparedStatement statement = null;
int i_count = 0;
try{
res.setContentType("text/html; charset=MS932");
// JDBCの通信階層は以下のようになる。
// ドライバクラス( ← JDBC)をロード
// DBコネクションの確立 (ユーザ/パスワード/接続先)
// ステートメントの生成 (コネクション内で動く"手"のようなモノ)
// SQLをステートメントに格納
// SQLの実行&結果(ResultSet型オブジェクト)の受領
// ResultSet の解析・処理
// ResultSet の解放
// ステートメントの解放
// DBコネクションの解放
// (ドライバクラスの解放) ← ガベジコレクション時にデストラクタが
// Autoでやってくれる。
// DBコネクション確立後は、SQL文を複数投げることが可能。
// SQLを作るまでは誰でも気にするが、ステートメントの解放、
// DBコネクションの解放は 忘れがちなので注意。特にtry~catch句の
// 中に close を書く場合、エラー時、読み飛ばされるのを想定しておくこと。
// JDBC Driver Load
// Oracle9の場合、CLASSPATHに classes12.jar , nls_classes12.jar が必要。
// このjarの中に、 oracle/jdbc/driver/OracleDriver.class がある。
Class.forName("oracle.jdbc.driver.OracleDriver");
//Class.forName("org.gjt.mm.mysql.Driver"); //MYSQL Version
// set parameter
Properties props = new Properties(); // ユーザー名/パスワードなどを入れるオブジェクト
props.put("user","user1"); // ユーザー名を入れる。
props.put("password","pass1"); // パスワードを入れる。
String s_db_url = "jdbc:oracle:thin:@db.gospel4.ne.jp:1521:ORCL";
//String s_db_url = "jdbc:mysql://192.168.0.4:3306/test?useUnicode=true&characterEncoding=MS932"; //MYSQL Version
// getConnection には、2種類(ホントは4種類)あり、
// jdbc:oracle:oci8:@GOSPEL4.WORLD
// jdbc:oracle:thin:@db.gospel4.ne.jp:1521:ORCL
// がある。
// oci8 は そのマシンのORACLE_HOMEから"GOSPEL4.WORLD"というサービス名を
// 探しに行き、その中の接続情報をもとに接続する。
// thin は 純粋に「そのマシンの、その1521ポートの、そのORACLE_SID」に接続
// する。
// DBコネクションを取得。確立できなければエラー
connection = DriverManager.getConnection(s_db_url,props);
if(connection == null){
throw new SQLException("connection error.");
}
// make sql
sql = "SELECT \n";
sql += "COL_A \n";
sql += "FROM TABLE_A \n";
//System.out.println(sql); // SQLのデバッグ文。平時はコメントアウト
// SQLをセットし、コネクションからステートメントを作成
statement = connection.prepareStatement(sql);
// sql を投げる。
statement.executeQuery();
// get Result。statementオブジェクトから結果オブジェクトを取り出す。
ResultSet resultset = statement.getResultSet();
// 結果格納用配列を用意する。
s_result = new String[100000]; // 配列型文字列の有効化。暫定的に100000個の枠を取った。
// write DB-data
while (resultset.next()) {
String s_user_cd = resultset.getString("COL_A");
s_result[i_count] = s_user_cd ;
i_count ++;
}
resultset.close(); // あけたら閉じる。
statement.close(); //
connection.close(); // 続けてSQLをなげる場合などは、閉じない。
PrintWriter pw = res.getWriter();
pw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
pw.println();
pw.println("<head>");
pw.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">");
pw.println("<!-- The Servlet expression tags interpolate script variables into the HTML -->");
pw.println("<title>ハロー!</title>");
pw.println("</head>");
pw.println("<body bgcolor=white>");
pw.println();
pw.println("<h1>ハロー!</h1>");
// 基本的なforループ
// forのカッコ内は (初期値;終了判定値;ループ毎の変数変化)
// なお、変数は複数設定可能である。
for(int i=0;i
ブラウザはIE6.0sp2以上、解像度1024*768以上を推奨します。