痔になりやすい生活習慣とは?

夜分失礼します。
上記内容について教えてください。
今JAVAを用いてレコード件数(200件)を表示させようとしています。
しかし、レコードセットの表示方法しか知らず、またレコード件数をPHPで表示させる方法くらいしか検索できませんでした。どこがいけないか指摘してください。
以下にコア部分を書きます。

// ドライバクラスをロード
Class.forName("org.gjt.mm.mysql.Driver");
// データベースへ接続
String url = "jdbc:mysql://localhost:3306/db";
con = DriverManager.getConnection(url,"root","**********")
stmt2 = con.createStatement();
strQuery2 = " select count(*) AS RecordNums from ********** ";
ResultSet rs2 = stmt2.executeQuery( strQuery2 );
SumNo = rs2.getFetchSize();

どうしてもSumNo=0となってしまいます。

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

A 回答 (3件)

>「java.sql.SQLException: Before start of result set SQL 」


>というエラーが出ました。
>このエラーは何を表しているのでしょうか??(・_・?)

ResultSetのURLを見てもらうと書いていますが、「初期状態では、カーソルは~」という理由で
getInt(int columnIndex) メソッドを呼び出す前に
next() メソッドを呼び出す必要があります。

つまり、

Connection con =DriverManager.getConnection(~);
Statement stmt = con.createStatement();
String sql="";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
int int_a = rs.getInt(~);
String str_a = rs.getString(~);
String str_b = rs.getString(~);
}
stmt.close();
con.close();

という使い方がDBへアクセスするときのひとつの流れです。(select文の結果を全て表示したいときですが)



>「public int getInt(int columnIndex)」
>この宣言はするべきなのでしょうか?
>これを追加すると(public int getInt;)ここがエラーになります。
どのクラスに定義しようとしていて、どんなエラーが出たのかよくわからないのでなんともいえませんが、インターフェースResultSetにはこのメソッドがすでに定義されているので、あなたがResultSetをimplementsしたクラスを作ろうとしているのならともかく、ResultSetをimplementsしたクラスを使うだけならこのメソッドを定義する必要はありません。


ところで、改行の問題はうまくいったんですか?

この回答への補足

詳しいご説明、ありがとうございました。
rs.next()が抜けていたのが問題だったようです。しかし、この問題が解決するとまた別のところにエラーが出てきました。これは自力で何とかします。

改行ですが・・結局JAVAで書くのは断念し(おい!
おとなしくout.println("<br>")とすることにしました。どうしたかを書くべきでした。申し訳ありません。
(〃⌒ー⌒〃)∫

補足日時:2006/05/24 13:27
    • good
    • 0

こんにちわ



ResultSet rs2 = stmt2.executeQuery( strQuery2 );

の後に

while(rs2.next()){
 SumNo = rs2.getInt(1);
}

を書いてください。
ResultSet取得後、next()で
カーソルを現在の位置から 1 行下に移動しないと
値は取れません。
next()すれば、
SumNo = rs2.getFetchSize();
でも取れるかもしれません。(試してませんが)

でも私ならgetInt()で件数は取得します。

この回答への補足

ありがとうございます。
rs.next()を追加すると解決しました。
ただ、whileのなかに入れる必要はないようです。
(一つの値として取得しているので)(=´∇`=)
いずれにしても、ありがとうございました。m(__)m

補足日時:2006/05/24 13:34
    • good
    • 0

count(*)の結果を取得したいんですよね?



でしたら、
SumNo = rs2.getFetchSize();
ではなく、
SumNo = rs2.getInt(1);
が正解です。

いちど、ResultSetのAPI仕様に目を通すことをおすすめします。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …

この回答への補足

ご解答ありがとうございます。
実はSQLコマンドのことはよく知らないのです。
API使用の参考の仕方から覚えようと努力します。

また、上記方法で試してみたのですが、
「java.sql.SQLException: Before start of result set SQL 」
というエラーが出ました。
このエラーは何を表しているのでしょうか??(・_・?)

補足日時:2006/05/24 09:01
    • good
    • 0
この回答へのお礼

「public int getInt(int columnIndex)」
この宣言はするべきなのでしょうか?
これを追加すると(public int getInt;)
ここがエラーになります。

お礼日時:2006/05/24 09:20

このQ&Aに関連する人気のQ&A

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

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

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

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

Qデータ数をカウントしたいのですが

JAVAのJDBCを使いMySqlを操作しデータ数を取得するプログラムです。自分なりに考えたプログラムは
Connection con = null;
String sql = "select count(*) from テーブル名";

// コネクションを作成する。
con = DriverManager.getConnection(url, user, pass);
Statement st = con.createStatement();

// SQLを実行する。
ResultSet rs = st.executeQuery(sql);
String count = rs.getString("count(*)");

実行した結果上手く出来ないのですが、この部分での間違いはありますか?

Aベストアンサー

どう上手くいかないのかエラーメッセージなどがあると分かりやすいのですが・・・とりあえず、count(*)というカラム名は取得できなかったと思います。

sqlを
select count(*) as cnt from テーブル名
にして、

値を取得する部分を
String coung = rs.getString("cnt");
にしてみてください。
もしくはsqlはそのままで、
rs.getString(1)
で1番目のカラムが取得できます。
(カラム名が固定なら最初のやりかたの方が分かりやすいと思います。)

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

Q「httpステータス404」というエラーが出ます。

「httpステータス404」というエラーが出ます。

java初心者です、宜しくお願い致します。
EclipseでServletを書いてやりましたが、以下のようなエラーが出ます、
原因はなんでしょうか、宜しくお願い致します。
「httpステータス404-/Servlet%E7%B7%B4%E7%BF%92/ ServOutput」

Aベストアンサー

Not Found
という意味です。
そのファイルが無い。あるいはリンクが間違っています。
詳しくは参考URLをみてください。

参考URL:http://ja.wikipedia.org/wiki/HTTP_404

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QJSPの処理の途中で、JavaScriptの処理をしたい

プログラムをJSPで記述している(<% %>タグ)のですが、
JavaScriptのalertやconfirmなどのポップアップするダイアログを
表示したいのです。それは可能なのでしょうか?

Aベストアンサー

No.2の回答に対する回答(変な日本語ですが)です。

JSPとJavaScriptの処理の行われる順番について考えていないと
エラーになることがありますよ。
大まかな流れは、
 JSPのソースをサーバ側で解釈、実行する(HTMLのソースを吐き出す)
  ↓
 クライアントに生成したソースを送信する
  ↓
 クライアント側のブラウザがソースを解釈する
  ↓
 ソースの中のJavaScriptを、ソースの上のほうから順次実行する
  ↓
 同時に、通常の表示(HTMLの解釈)も実行される

 と、こういう流れですので、例えば、JavaScriptで値を入力し、
JSPでその値を使おうとすると、エラーとなります。

 具体的にやりたいこと(やろうとしていること)を書いていただいたほうが
適切に回答できますが、上記が今考えられるエラーの原因です。

QJSPでリンクを利用してパラメータを次画面に渡す方法について。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">
---------------------------------------------------------------------

としておりますが、次画面へ遷移すると、ID_Bの値はnullとなってしまうために、正常にデータの取得ができません。

二つのパラメータを使用する場合のパラメータを渡す方法を教えて頂きたいと思います。よろしくお願いします。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">...続きを読む

Aベストアンサー

<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>&ID_B=<%= rs.getString("ID_Bcat_id") %>">番号</a>

としてID_Bを&で繋げればMethod="get"で送れますね。
inputタグで送る場合はformタグでactionアトリビュートに飛ぶjspを指定してsubmitボタンかJavaScriptでsubmitさせなければならないと思います。

QResultSet での問題

だいたいのプログラム内容:
login.htmlでログインを試み、そこからメールアドレス、パスワードがerrormsg.jspにパラメータで送られ、errormsg.jspからLoginBean.java(bean)を使いSQLデータに入ってるメールアドレス、パスワードと照らし合わされ、データに登録されていなかったら、エラーメッセージが返され、合っていたらwelcom.htmlページに送られます。
たまたま@ITで似たような内容があったので、基本的には同じように作りました。
でも、うまくデータを照合し分けることができません。パラメータは調べたらきちんと通っており。ResultSetの所に問題があると分かりました。
以下はLoginBean.javaの主な問題コードです。
public boolean confirm(){
try{
//SQLへの接続省略してます
String sql_str = "SELECT email, password FROM customer where email='"+email+"'AND password='"+password+"'";
//ここが問題の部分です。
ResultSet rs = stmt.executeQuery(sql_str);
if(rs!=null){
rs.close();
stmt.close();
connection.close();
return true;
}
else{
rs.close();
stmt.close();
connection.close();
return false;}
}catch(SQLException e) {
return false;
}catch(Exception e){
e.printStackTrace();
return false;}}}
このように、パラメータからきたアドレスパスワードを使い、SQLのSELECTで検索されたものをrsに返し、rsが空でなければ、trueを返します。(このメソッドはerromsg.jspから呼ばれます。)しかしデータに登録さてないものでもrsがnullでないと判断され、trueが帰ってきます。

だいたいのプログラム内容:
login.htmlでログインを試み、そこからメールアドレス、パスワードがerrormsg.jspにパラメータで送られ、errormsg.jspからLoginBean.java(bean)を使いSQLデータに入ってるメールアドレス、パスワードと照らし合わされ、データに登録されていなかったら、エラーメッセージが返され、合っていたらwelcom.htmlページに送られます。
たまたま@ITで似たような内容があったので、基本的には同じように作りました。
でも、うまくデータを照合し分けることができません。パラメータは調べ...続きを読む

Aベストアンサー

 ResultSetオブジェクトは、行が無くてもnullにはなりませぬ。つまり、「結果が1行も無いResultSetオブジェクト」になります。

 Java2 1.4.2 APIを参照しても、Returnsに「never null」と名言されています。

 なので行があるかないかは、ResultSet.next()やResultSet.getRow()で判断します。または
SELECT Count(email) FROM customer where email='"+email+"'AND password='"+password+"'"
というSQL文で、最初の行の最初のフィールドが0であれば存在しないという判断になるかと思います。

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む


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

人気Q&Aランキング