• ベストアンサー

JAVA(JDBC)の検索について

HTMLから名前の値をservletで受けとめServletでAccessのデータから検索をするのですが検索が一致しなかった場合エラーページに飛ばす設定したいのですが・・ 下記の内容後どうすれば・・・              String s ="SELECT * FROM TABLE(テーブル名) WHERE Name(フィールド名)='"+htmlvalue(HTMLからの検索の値)+"'"; このあとどのような条件を設定してエラーページに移すか? 手助けお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#3852
noname#3852
回答No.1

telさん、こんにちは。 話を整理します。HTML うんぬんはとりあえず置いて、検索結果0の判断を先にします。 SQL文の生成はできているようですので、次にDBに問い合わせます。 データベースに接続して、ステートメント(java.sql.Statement のオブジェクト)を取得するところまでは、できていると仮定して(この仮定が成り立っていない場合は、参考URLを参照してください。AccessならODBC接続になるとおもいますが、参考URLページ中程にあるリンク「JDBC-ODBC ブリッジドライバ」を参照した方がいいでしょう)、 クエリー発行は、Statement クラスの executeQuery メソッドを使用します。 このメソッドは、検索結果が0件であろうとなかろうと結果セット(java.sql.ResultSet のオブジェクト)を戻します。 この ResultSet から結果の値を取得するには、 next() メソッドを使って次の行があるか判断して、1レコードずつデータを取得していきます。ResultSet にはカーソルと言う概念があって、最初先頭レコードの手前にあります。next() メソッドが呼び出されるたびに、次の行があるか判断し、あればカーソルを次の行に移動して true を、なければなにもせず false を戻します。 このことから、もし件数が0件の場合、最初の next() メソッド呼び出しで false が戻されるわけです。 ここまでの話をまとめるとこんな感じです。 import java.sql.* ; (中略) Connection con = コネクションの取得 ; // ステートメントを取得 Statement st = con.createStatement( ) ; // クエリー発行、結果セットの取得 ResultSet rs = st.executeQuery( SQL文文字列 ) ; // 件数カウンタ int count = 0 ; while ( rs.next() ) {   count++ ; // カウントアップ   ResultSet のget系メソッドの呼び出し } if ( count == 0 ) {   ヒットなしです } else {   ヒットありです } ここまでで何とか件数が0件か否かまでは分かるとして、次に画面遷移ですが、 HTML の話が出ているの Servlet 上での処理だとします。 doPostメソッドでも、doGetメソッドでもかまわないですが、引数に javax.servlet.http.HttpServletRequest があります。 この HttpServletRequest には(正確には親の javax.servlet.ServletRequest) getRequestDispatcher メソッドがあって、javax.servlet.RequestDispatcher を取得できます(これが何なのかは省略)。 RequestDispatcher にfoward メソッドがあってこれを呼ぶと、あらかじめ指定したパスに遷移します。 こんな感じです。 // doPostメソッドかも protected void doGet(HttpServletRequest req, HttpServletResponse resp)     throws ServletException, java.io.IOException {   (中略)   RequestDispatcher disp = req.getRequestDispatcher( 移動先のパス ) ;   disp.forward( req, resp ) ; } これらを組み合わせるとこんな感じですかね。 protected void doGet(HttpServletRequest req, HttpServletResponse resp)     throws ServletException, java.io.IOException {   (中略)   // クエリー発行、結果セットの取得   ResultSet rs = st.executeQuery( SQL文文字列 ) ;   // 件数カウンタ   int count = 0 ;   while ( rs.next() ) {     count++ ; // カウントアップ     ResultSet のget系メソッドの呼び出し   }   // ヒットなし   if ( count == 0 ) {     RequestDispatcher disp = req.getRequestDispatcher( エラーページ・パス ) ;     disp.forward( req, resp ) ;     return ;   }   以降、通常の処理 } 以上で題意を満たすとは思います。 データベース接続で、例外処理やclose処理を含めていないなど、一部欠けている点はありますが、それは今回の本筋と離れるので省略しています。 詳しくは書籍やwebなどで探ってください。 JDBCに関しては以下のURLが標準的な内容理解にはいいと思います。

参考URL:
http://java.sun.com/j2se/1.3/ja/docs/ja/guide/jdbc/index.html

関連するQ&A