SAK 図書館
Oracle9i + Servlet、JSP 編1 - Servlet JDBC アクセス、getConnection
■Oracle9i + JDBC、JAVA Servlet アクセス
・Oracle9i の JDBC ドライバは、j:/oracle/ora90/jdbc/lib/ にある。
classes12 セットを使用してテストする。
ドライバの配置は、次のようにした。
c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/classes12.jar
・CLASSPATH は、次のようにした。
尚、Cygwin B20 では、「"」で囲まないと「;」でエラーになる。
また、普通のパスは、Cygwin B20 では「:」で区切るが、CLASSPATH は、
DOS と同じく「;」でかつ、「c:/...」のようにシステムパスから指定する
必要がある。
export CLASSPATH=".;c:/cygnus/jakarta-tomcat-3.3.1/lib/common/servlet.jar;c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/classes12.jar"
・Oracle のファイルシステムをマウントする。
尚、単に環境変数定義を楽にするためにマッピングしただけである。
mount -f j:/oracle/ora90 /oracle
Device Directory Type Flags
c:\cygnus\cygwin-b20\share /sw/cygwin-b20/share native text!=binary
g:\tmp /src native text!=binary
j:\oracle\ora90 /oracle native text!=binary
c:\cygnus / native text!=binary
・.bashrc に Oracle 環境変数を追加定義する。
尚、修正後に「source /.bashrc」と実行するか、Cygwin B20 を再起動する
必要がある。
export HOME=/
export PATH=/j2sdk/bin:/usr/local/mysql/bin:/usr/local/perl/bin:$PATH:/usr/local/pgsql/bin:/usr/local/bin:/usr/local/apache:/oracle/BIN
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=/usr/local/pgsql/lib
export PGDATA=/usr/local/pgsql/data
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:/usr/local/lib:/oracle/LIB
export TOMCAT_HOME=c:/cygnus/jakarta-tomcat-3.3.1
export JAVA_HOME=/j2sdk
export CLASSPATH=".;c:/cygnus/jakarta-tomcat-3.3.1/lib/common/servlet.jar;c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/classes12.jar"
cd
ls -aF
・Oracle は、OracleServiceSAK と OracleOraHome90TNSListener のサービス
が開始されている必要がある。
尚、Oracle では、致命的なアクセスエラーなどが発生すると、
Tomcat のサービスが異常終了したり、起動時エラーが発生する。
もし、異常が発生したら、
1. Tomcat を終了させる。
2. ps で、/j2sdk/bin/java.exe の PID を kill する。(既にない場合もある)
3. OracleOraHome90TNSListener サービス を再起動する。
4. Tomcat を起動する。
で確実に回復する。
また、「Not Found (404)」や Tomcat の起動時にずらずらっとエラーが
出る場合も、同様な状態になっいる可能性が高い。
上記の手順で Oracle に関係する障害であれば回復できる。
(タイムアウトの設定でもあるのだろうか...)
・上記障害は、Cygwin 2.05b、Cygipc 1.11.1、JAVA2 SDK 1.4.0 で、発生しな
くなった。うれしい〜。
■Oracle9i + JDBC、JAVA Servlet アクセステスト
・サーブレット(JAVA Servlet) から、JDBC で Oracle9i にアクセスする
には、次のようにする。
// test_oracle.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class test_oracle extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
// HTML ヘッダ出力
PrintWriter rw = res.getWriter();
rw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">");
rw.println("<HTML>");
rw.println("<HEAD>");
rw.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">");
rw.println("<TITLE>JAVA Servlet - Oracle9i JDBC Test</TITLE>");
rw.println("</HEAD>");
rw.println("<BODY>");
rw.println("<P>JAVA Servlet - Oracle9i JDBC Test</P>");
try {
// Oracle9i JDBC ドライバロード
Class.forName("oracle.jdbc.OracleDriver");
// Oracle9i JDBC 接続
String dsn = "jdbc:oracle:thin:@sak-design:1521:sak";
Connection cn = DriverManager.getConnection(dsn, "sak", "sak");
// Oracle9i JDBC 問い合わせ SQL 作成
String sql = "select * from seqm";
Statement st = cn.createStatement();
// Oracle9i JDBC レコードセットオープン
ResultSet rs = st.executeQuery(sql);
// Oracle9i JDBC レコードセットリード
while (rs.next()) {
rw.println("<P>" + rs.getString(1) + "</P>");
}
// Oracle9i JDBC レコードセットクローズ
rs.close();
// Oracle9i JDBC ステートメントクローズ
st.close();
// Oracle9i JDBC 接続クローズ
cn.close();
}
catch (Exception e) {
// エラー処理
rw.println("<P>error</P>");
}
// HTML テイル出力
rw.println("</BODY>");
rw.println("</HTML>");
}
}
・JAVA ソースは、次のようにコンパイルして、test_oracle.class を作成する。
cd /src
javac test_oracle.java
・Servlet(test_oracle.class) は、
/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/classes/ の中に配置し、
ブラウザより、次の URL で実行する。
http://sak-design:8080/sak/servlet/test_oracle
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料