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 編資料