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と関連する良く見られている質問

QGoogle  yahoo 検索結果の数

Googleにて
「Google」と検索かけたら
検索結果が92,400,000 件で

yahooにて
「Google」と検索かけたら
検索結果が4,510,000,000件 件でした。

なぜGoogleのくせに
yahooより検索結果が少ないのでしょうか?

Aベストアンサー

こんにちは。

Web全体で検索してみました。
結果は
Yahoo! 4,490,000,000件
Google 2,700,000,000件 でした。
Googleはこれが上限なんでしょうかね?高速化のため上限があるとか。
いずれにせよどちらも、1000件目以降の検索結果は参照できないみたいなので、そんなにヒットしても困るんですが;

まあ、検索サイトは最初のページに見たい情報が必ず入るのがベストなので、検索結果の件数よりそっちのほうが重要なんでしょうけど…。

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});}
でしょう。

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

QGoogle検索ででてこないようにする。

Google検索ででてこないようにする。
友人の会社がたたかれています。だれかがGoogleで検索するとき、その単語がGoogle検索ででてこないようにするのは可能でしょうか。つまり直接Googleに依頼する。

Aベストアンサー

>そのメタタグについては自分のブログですよね。他人のブログはできないのですか。

他人のブログを検索結果に出さないようにする権利が貴方にはありませんから無理です。

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に遷移する時に、値を引き渡すという本題の質問は、これで解決ですね♪

Qau携帯でのgoogle検索について

auのS005を使用しています。
au one トップページからの検索とgoogle mobileの検索結果がちがうのですが、なぜでしょうか?

ezwebに接続するとou oneトップページが表示されます。
そのページの検索はEnhanced by googleとなっています。
自分の会社を検索すると検索結果に表示されません。

続いてgoogle mobileにて検索するとヒットします。

同じgoogleの検索のようですがなぜでしょうか?
またau oneからの検索にヒットしないということは、携帯検索からヒットしないということでしょうか?

Aベストアンサー

>同じgoogleの検索のようですがなぜでしょうか?

「Enhanced by google」とは、auOneがgoogle検索を使っている、ということではありません。

「Enhanced」とは「強化された」という意味です。
なので「Enhanced by google」は「googleによって強化された」という意味になります。

「自社サイトの検索機能を強化するためにgoogleのシステムを使わせてもらいました」ということなんです。

auOneとgoogleでは使用しているサーバーや基幹ネットワークが違いますから、検索結果が違っても仕方ありません。
検索された履歴が無ければ後に行ってしまいますし、場合によっては検索にヒットしないこともあり得ます。

>au oneからの検索にヒットしないということは、携帯検索からヒットしないということでしょうか

auOneを利用するのは基本的にauユーザー限定ですので蓄積しているデータ量はgoogle等のポータルサイトに比べるとかなり貧弱です。
他のポータルサイトからの検索は試されましたか?
auOneだけでなく、Yahoo!やgoo、Infoseekの各モバイルサイトからも検索してみてください。
ヒットするかもしれませんよ。


以上、参考になれば幸いです。
長文、駄文、ご容赦ください。

>同じgoogleの検索のようですがなぜでしょうか?

「Enhanced by google」とは、auOneがgoogle検索を使っている、ということではありません。

「Enhanced」とは「強化された」という意味です。
なので「Enhanced by google」は「googleによって強化された」という意味になります。

「自社サイトの検索機能を強化するためにgoogleのシステムを使わせてもらいました」ということなんです。

auOneとgoogleでは使用しているサーバーや基幹ネットワークが違いますから、検索結果が違っても仕方ありません。
検索さ...続きを読む

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

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

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

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

Aベストアンサー

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

QGoogle 検索後のページでサジェストできなくなった。。

Googleにデフォルトでサジェスト(オートコンプリート)機能が搭載されてからも、元Googleサジェストのページでは、トップページだけでなく検索後でもサジェスト可能だったのですが、数日前から検索後のページではサジェストが出来なくなり、通常のGoogleと一緒になってしまいました。この機能がないと厳しいです。何かありましたら、ご意見お願いします!


通常Google
http://www.google.co.jp/
検索後のページではサジェスト不可能

元Googleサジェスト
http://www.google.co.jp/webhp?complete=1&hl=ja
トップページでも検索後でもサジェスト可能だった

Aベストアンサー

私も同じ悩みをかかえています。苦肉の策で、過去に使ったことのある「検索後」のページを登録しています。
http://www.google.com/search?complete=1&hl=ja&q=+

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であることに注意)

QGoogle Desktop の検索と Google Toolbar の検索はどちらが早い?

 こんにちは。早速ですが・・・
「Google Desktop」の「検索」と 「Google Toolbar」 の「検索」はどちらが早いですか。

今気づいたのですが、
「Google Desktop」の「検索」・・・「インターネット内」の検索
「Google Toolbar」 の「検索」・・・「パソコン内」の検索

でしょうか?
 しかしパソコン内を「検索」する必要はあまりないような気がしますが、ご意見をお願いします。

何が知りたいかというと、ぼくはいま「Vista」ですが「Google Desktop」をインストールする利点があるのかな?ということが知りたいからです。

よろしくお願いいたします。

Aベストアンサー

XP では Google Desktop、Vista では標準のクイック検索を利用しています。

>「Google Desktop」の「検索」・・・「インターネット内」の検索
>「Google Toolbar」 の「検索」・・・「パソコン内」の検索

その通りです。
検索する内容(用途)が違いますから、比較できません。
(Google Desktop がインストールされていた場合、Google Desktop で Web の検索や、Google ToolBar でデスクトップ検索も可能です。)

>パソコン内を「検索」する必要はあまりないような気がしますが、

自分の場合、必要最小限のファイル形式のみを対象に設定していますが、例えば、WebサイトのIDを忘れた時に登録確認メールを [(サービス名) ID] 等のキーワードで検索する等、主に必要な文章が記載されているメールや資料を検索に利用しています。また、プログラム名を打ち込んで、そのプログラムを起動させる事もあります。

>いま「Vista」ですが「Google Desktop」をインストールする利点があるのかな?

個人的には、Vista の『クイック検索』と略同様な機能ですから、特に必要だとは思いませんけど。逆に、XP の場合は、『Windowsデスクトップ サーチ』又は『Google Desktop』をインストールする事に拠り、Vista の『クイック検索』と同様な機能が利用できるメリットはあります。

尚、Vista で、Google Desktop をインストールする場合、ServicePack1 へのアップデートが必要だと記憶しています。(要確認)

クイック検索
http://www.microsoft.com/japan/windows/products/windowsvista/features/details/instantsearch.mspx
Googleデスクトップで検索力を磨く(第39回):深川岳志「Google探検隊」
http://pc.nikkeibp.co.jp/article/column/20080523/1003152/

XP では Google Desktop、Vista では標準のクイック検索を利用しています。

>「Google Desktop」の「検索」・・・「インターネット内」の検索
>「Google Toolbar」 の「検索」・・・「パソコン内」の検索

その通りです。
検索する内容(用途)が違いますから、比較できません。
(Google Desktop がインストールされていた場合、Google Desktop で Web の検索や、Google ToolBar でデスクトップ検索も可能です。)

>パソコン内を「検索」する必要はあまりないような気がしますが、

自分の場合、必...続きを読む

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ランキング