2007年11月19日月曜日

ResultSet の close

データソースによる接続で Connection / Statement /ResultSet を使用している場合、それぞれの close 処理を filnally ブロックで全て行うことが JNDI Datasource HOW-TO では例として示されています。

Javadoc によると ResultSet は Statement を閉じたり再実行したときなどに自動的に close されると書いてあります。人によっては ResultSet の close 処理を記述しない人もいるようです。私も冗長に思うので省略しています。ただし Statement は使い終わったらすぐに閉じるようにしています。

____

<サンプル>
下記の例では rs の close を記述していません。
Connection con = null;
PreparedStatement pst = null;
    try {
        Context ctx = new InitialContext();
        DataSource ds =
            (DataSource)ctx.lookup("java:comp/env/jdbc/sample");
        con = ds.getConnection();
        pst = con.prepareStatement("select * from mytable where name=?");
        pst.setString(1, req.getParemeter("name"));
        ResultSet rs = pst.executeQuery();
        if (rs.next()) {
            pst = con.prepareStatement("....");
            pst.setString(...);
            pst.executeUpdate();
        }
    } catch (NamingException e) {
            e.printStackTrace();
    } catch (SQLException e) {
            e.printStackTrace();
    } finally {
        try {
            if (pst != null) {pst.close();}
            if (con != null) {con.close();}
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
______

2007年11月18日日曜日

PreparedStatement

 データベースへ接続して書き込みなどを行う際、SQL 命令文 「’」「”」などはエスケープ処理をする必要があります。
 例えば下記のようなエスケープメソッドを定義して利用することができます。

    public static String escape(String s) {    
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            switch (s.charAt(i)) {
                case '\'' :
                    str.append("\\\'");
                    break;
                case '"' :
                    str.append("\\\"");
                    break;
                case '\\' :
                    str.append("\\\\");
                    break;
                default :
                    str.append(s.charAt(i));
                    break;
            }
        }
        return str.toString();
    }
______

 しかし、PreparedStatement の setString メソッドを使うとセットする文字列を自動でエスケープしてくれるのでエスケープメソッドは必要なくなります。
 PreparedStatement には setString だけでなく setInt, setLong などのメソッドもあります。

PreparedStatement pst = con.prepareStatement("select*from mytable where title=?");
pst.setString(1, req.getParameter("title"));

 などのように利用するだけで req.getParameter("title") に SQL 命令文に影響を与える文字があってもエスケープしてくれます。
 
 また、ステートメントを用意した後は setString メソッドなどを使ってパラメータを変えるだけで次のSQL 文を作成できるので高速に動作します。

データソース

 この時点では SJC-WC の出題範囲ではないですが、JSP/サーブレットアプリケーションでデータベースへ接続する際は JNDI データソースを利用することが推奨されます。
 データソースはコネクションプーリングという仕組みで、あらかじめ確保してあるデータベースへのコネクションプーリングからコネクションを利用します。
 設定方法は
  • コンテキストファイルを編集する
  • web.xml に resource-ref 要素を追加する

というようになります。これによりアプリケーション単位でデータベースへの接続を設定することができます。 Tomcat の server.xml に設定するとすべてのアプリケーションでデータソースを利用できます。

 詳しい設定方法は JNDI Datasource HOW-TO に書かれています。

 設定がうまくいかない場合は Tomcat の Administration Tool を使うこともできます。このツールではわかりやすいユーザーインターフェースで設定できます。
 Administration Tool のインストールは Tomcat 5.5 のバージョンまでは提供されているようです。設定方法は zip を解答してファイルを配置するだけです。

2007年11月9日金曜日

試験の予約手順

  1. バウチャーチケットの購入
    Sun のチケット購入ページからバウチャーチケットを購入します。
    バウチャーチケットの購入ルートは他にもあるようなので検索してみてください。
  2. PROMETRIC のページから申し込みます。
現時点で Sun の資格はバウチャーチケットでしか申し込めないのでバウチャーチケットを手に入れます。PROMETRIC で ID を取得して試験の日時、会場を指定します。

EDIT(2010年): 2010年にOracleがSunを買収しました。それに伴い、今後はSJC-WCよりもOJC-WCという名前が浸透していくと考えられます。

2007年10月21日日曜日

eclipse

eclipse
インストール
任意のフォルダにインストールできます。

設定
立ち上げるとワークスペースを設定する必要があります。
任意のフォルダでOKです。

通常 Installed JREs で JRE を JDK に設定します。

日本語の言語パックもダウンロードできます。

2007年10月17日水曜日

Tomcat

Tomcat は代表的なサーブレットエンジンです。
JSP や サーブレットのコンテナとして広く利用されています。

Tomcat のインストール
http://tomcat.apache.org/ よりダウンロード

クラスパスの設定
(例)
CATALINA_HOME → C:\Program Files\Apache Software Foundation\Tomcat5.5
CLASSPATH → .;%CATALINA_HOME%\common\lib\servlet-api.jar;%CATALINA_HOME%\common\lib\jsp-api.jar

Tomcat は Web サーバーとしても機能します。
Web サーバーとして大きなシェアを持っている Apache と組み合わせてTomcat をサーブレットコンテナ専用で使うのが現在の主流です。

tomcatPlugin

eclipse に tomcatPlugin を組み合わせると Web アプリケーションの開発が便利になります。
eclipsetotale.com より
eclipse のバージョンに対応した tomcatPlugin をダウンロードして eclipse の plugins フォルダに配置します。
eclipse を再起動すると完了です。