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/jd …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Chrome(クローム) Chromeのアドレスバーに履歴等を表示させないようにしたい 2 2022/09/08 14:20
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- SEO 検索エンジン反映遅い 1 2022/06/04 07:35
- その他(ブラウザ) 教えて!gooなのですが、投稿者名で検索されたら過去の質問が出てきてしまいますか? 3 2023/03/13 02:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
mainメソッドのthrows節で設定...
-
final修飾子を使っているのに、...
-
コマンドプロンプト実行後に画...
-
C#で右からnカラム目に文字を挿...
-
オーバーロードの「あいまい」...
-
10進の自然数を2進数に変換する...
-
VBPをダブルクリックするとたま...
-
javaの質問です 次の機能を有す...
-
onClickで関数呼出し後に、結果...
-
Labelコントロールに数字を代入...
-
HyperLinkのNavigateUrl属性に...
-
JAVA コンパイル時のエラー
-
javaの質問です 次の機能を有す...
-
ShellExecuteってなんで関数?
-
VBA/FIND関数を使っての先頭文...
-
Javaのクラスのstaticメソッド...
-
System.load() と System.loa...
-
JSPで<SELECT>の中にDBから持っ...
-
配列のメソッド
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
エクセルVBAにおけるON TIMEメ...
-
【sendkeysメソッドが動かずに...
-
コマンドプロンプト実行後に画...
-
onClickで関数呼出し後に、結果...
-
DataGridViewでセルクリックイ...
-
Labelコントロールに数字を代入...
-
ExcelのxlDialogInsertPictureで。
-
final修飾子を使っているのに、...
-
JSPで<SELECT>の中にDBから持っ...
-
VBPをダブルクリックするとたま...
-
Excel VBA でExcelを終了したい...
-
Refreshメソッドの使い方
-
ウィンドウを最前面にできません
-
javascriptからjavaを呼び出したい
-
VB.netで、シリアル通信のタイ...
-
mainメソッドのthrows節で設定...
-
VBAでSaveAs使用し、指定してい...
-
PDFファイルから別ウィンドウで...
-
Application.Wait の参照設定
おすすめ情報