OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

JAVA(JDBC)の検索について

  • すぐに回答を!
  • 質問No.190832
  • 閲覧数2408
  • ありがとう数3
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 66% (294/439)

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

String s ="SELECT * FROM TABLE(テーブル名) WHERE Name(フィールド名)='"+htmlvalue(HTMLからの検索の値)+"'";
このあとどのような条件を設定してエラーページに移すか?
手助けお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答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が標準的な内容理解にはいいと思います。
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ