- ベストアンサー
JAVA(JDBC)の検索について
HTMLから名前の値をservletで受けとめServletでAccessのデータから検索をするのですが検索が一致しなかった場合エラーページに飛ばす設定したいのですが・・ 下記の内容後どうすれば・・・ String s ="SELECT * FROM TABLE(テーブル名) WHERE Name(フィールド名)='"+htmlvalue(HTMLからの検索の値)+"'"; このあとどのような条件を設定してエラーページに移すか? 手助けお願いします。
- みんなの回答 (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が標準的な内容理解にはいいと思います。