アプリ版:「スタンプのみでお礼する」機能のリリースについて

HTMLから名前の値をservletで受けとめServletでAccessのデータから検索をするのですが検索が一致しなかった場合エラーページに飛ばす設定したいのですが・・
下記の内容後どうすれば・・・             

String s ="SELECT * FROM TABLE(テーブル名) WHERE Name(フィールド名)='"+htmlvalue(HTMLからの検索の値)+"'";
このあとどのような条件を設定してエラーページに移すか?
手助けお願いします。

A 回答 (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/jd …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!