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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJquery a href="javascript:名前('.$データ.')">の方法でString(文字)を渡す方法

一部不備ありましたので、再度質問です。。
すみません
初めまして、jqueryを勉強し始めている初心者です。。
a href="javascript:名前('.$データ.')">の方法で
データにString(文字)を持たせ、JQUERYを利用して、別のphpファイル(testo2.php)に値を渡し、
そのphpファイル(testo2.php)そのloadで読みたいのですが、うまくいきません
この方法ではできないのでしょうか?
このa href="javascript:名前('.$String型.')の方法を何とか
利用したいと思ってますので、ご存知の方いましたら、
教えていただけないでしょうか。。。?
また別方法があれが教えていただけないでしょうか?
(input hidden 等以外のa href="javascript:名前('.$String型.')的な方法)
何度もすみません。。。
何ぶん、勉強初めて、1ヶ月弱のため、不備等がれば、すみません。
環境、jquery1.4, PHP5.0, eclipse3.5


//-----testo1.php
<html>
<head>
<script type="text/javascript" src="jquery1.4.js"></script>
<script type="text/javascript" src="tes.js"></script>
<title></title>
</head>
<body>
<?php
//$id=1;(数字)の場合は値はわたせる、String 型の値の渡し方
//<a href="javascript:名前('.$文字列(String型).')">前のページ</a>
//でJQUERYを利用して、別のphpファイル(testo2.php)にを渡し
//loadで読みたい。
$id='文字列aaa';
<a href="javascript:value('.$id.')">前のページ</a>
?>
<div id="box">ここに値を表示したい</div>
</body></html>

//----tes.js
function value(id)
{$("#box").load("php/tt.php",{id:id});}

//------testo2.php
<html>
<head>
<script type="text/javascript" src="jquery1.4.js"></script>
<script type="text/javascript" src="tes.js"></script>
<title></title>
</head>
<body>
<?php
echo $_POST['id'];//文字列String型を受けたい。
?>
</body></html>

一部不備ありましたので、再度質問です。。
すみません
初めまして、jqueryを勉強し始めている初心者です。。
a href="javascript:名前('.$データ.')">の方法で
データにString(文字)を持たせ、JQUERYを利用して、別のphpファイル(testo2.php)に値を渡し、
そのphpファイル(testo2.php)そのloadで読みたいのですが、うまくいきません
この方法ではできないのでしょうか?
このa href="javascript:名前('.$String型.')の方法を何とか
利用したいと思ってますので、ご存知の方いましたら、
教えていた...続きを読む

Aベストアンサー

よく見ると、tes.jsのjavascriptも間違ってます。
function value(id)
{$("#box").load("php/testo2.php",{id:id});}
でしょう。

何か、意図してることが、さっぱりわかりません。

QServletからServletへの値渡し

最近、A-ServletからB-Servletへの遷移は

response.sendRedirect("B-Servlet");

で可能だと教えて頂きました。

ですがもうひとつわからないことがあります。
このときに、B-Servletへ変数を渡したいのですがやり方がわかりません。
わかる方教えてください><

Aベストアンサー

こんにちは。world99です。 sin-da4のご認識の通りでした。
 doGet()で呼び出されたサーブレットから次のサーブレットに遷移する時は、doGet()が実行されます。同じように、doPost()で呼び出されたサーブレットは、doPost()で次のサーブレットを呼び出します。
 実は、私が試したサンプルは、doGet()とdoPost()のどちらが呼び出されても、doProcess()というメソッドを実行するように、実装しています。文章を短くするための、それを端折っていました。という訳で、この事に気がつきませんでした。
 教えているつもりだった私が逆に、教えて頂きましたねありがとうございます。orz
 あるServletから別のServeltに遷移する時に、値を引き渡すという本題の質問は、これで解決ですね♪

QHTMLから入力値なしで、servletを動かすにはどうやったらいいで

HTMLから入力値なしで、servletを動かすにはどうやったらいいですか。

webアプリで生徒リストを出すとき、全員分の名前クラス住所など出すのに
sqlで指定は*だけです。

無理やりform actionで何かを送らないと無理ですか?
それかJSPのほうがいいですか。

Aベストアンサー

方法は幾つかあると思います。
フォームに依存しない固定条件でクエリを発行するような場合に自分が以前やった事のある方法ですが
web.xmlのservlet-maping/url-patternにリクエストURLを定義し、
そのURLに対してHTML側から静的なリンクを張る方法はどうでしょうか。
結果ページ表示後にリクエストURLがカレントパスに残るのが気持ち悪ければ、
結果のservletへリダイレクトして、そちらで処理をすれば良いと思います。
(パラメータの渡し方には多少注意が必要ですが)
あくまで参考意見程度にどうぞ。

QString s = ?(97);// get 'a'

String s = ?(97);
s.equals("a")にするための?の部分を教えてください。

Aベストアンサー

String s = String.valueOf((char)97);

1.2は確認できませんが、1.3では確認済。
要は数値でもcharにキャストすればOKです。(コードがUNICODEであることに注意)

QMap Hash = new Hash

Map<String, String> Hash = new HashMap<String, String>();

このjavaのハッシュマップの初期化の方法を教えてください。

Aベストアンサー

2回目?
1回目と同じですよ。

Map<String, String> Hash = new HashMap<String, String>(); //1回目
Hash = new HashMap<String, String>(); //2回目
Hash = new HashMap<String, String>(); //3回目
Hash = new HashMap<String, String>(); //4回目
//このあとも好きなだけどうぞ・・

なにか質問の意味を勘違いしてますかね?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報