Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

件数で条件分岐させる処理について

Java初心者で勉強不足のため、ご回答いただけると幸いです。

現在、ある資格を取得した社員をまとめたデータベースに対して、更新または新規登録を行うプログラムを作成しています。データベース(TN)には「社員番号」と「取得年」をまとめています。

入力フォームで社員番号と資格の取得年を入力し、確認のダイアログで「OK」、「キャンセル」のボタンを表示させた後、「OK」をクリックすると、完了フォームに移動するようにしています。

今回質問したいのは、完了フォーム内の分岐処理についてです。
入力した社員番号と、TNで登録されている社員番号と比較して、
・レコードの件数が0件であれば、SQLのINSERTで新規登録
・それ以外(レコードの件数が1件)であれば、SQLのUPDATEで更新
というコードを作成しました。

ソースコードは以下の通りです。
------------------------------------
//    変数の設定
    String     sSyainno = request.getParameter("SYAINNO");
    String     sNendo   = request.getParameter("NENDO");

    session.setAttribute("SYAINNO",sSyainno);
    session.setAttribute("NENDO",sNendo);

//    DB接続
    Connection con = DriverManager.getConnection(url, user, password);
    Statement stmt = con.createStatement();

    ResultSet rs;
    String sSql = "SELECT COUNT (*) FROM TN WHERE 社員番号 = '" + sSyainno + "'";
    int count = rs.getInt("1");
    rs.close();

    if (ResultSet.count = 0 ) {

        sSql = "INSERT INTO TN VALUES(" + sSyainno + ",";
        sSql += "'" + sNendo + "'";
        sSql += ")";

    }
    else {

        sSql = "UPDATE TN SET ";
        sSql += "取得年 = '" + sNendo + "'";
        sSql += " WHERE 社員番号 = '" + sSyainno + "'";
        }

    stmt.execute(sSql);

    stmt.close();
    con.close();
------------------------------------

上記のコードを実行したところ、

if (ResultSet.count = 0 ) {

の行でエラーが発生しました。

エラーメッセージは以下の通りです。
------------------------------------
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: 

ResultSet.count cannot be resolved
------------------------------------

文法が間違っていると思いますが、ifの内部に入れる文が分からない状況です。
ResultSetに入れた件数を読み込めるようにしたいと思っています。

どうぞよろしくお願いいたします。

2

回答

35866

閲覧

2件の回答

評価

0

はじめまして。
同じく初心者なので、さらっと流して読んでいただけたらと思います…
ResultSetは件数取れなかったと思います。
過去に、できなくてSQLのSELECT COUNTの結果をifの内部に入れたことがあります。

自信なくて、詳しくもなくてすみません;

評価

0

>Java初心者で勉強不足のため、
こういうのは質問そのものに関係がないため、書かない方が良い。
まるで初心者、勉強不足を言い訳にして、他人に自分のすべきことを押しつけているように思われる。

すでに回答があるが、「SQLのCOUNTで得た件数」を一回で取ることはできない。
ResultSetのイメージは「実行結果のテーブル」。SELECT文がどのような内容でもそれは変わらない。
そしてこのテーブルは、まず行を選択、次に列という使い方をする。

考え方は以下。

SELECT COUNT (*)〜

というSQLを発行すると、ResultSetは常に1行1列のテーブルになる。
ResultSetのメソッドでこの1行を選択し、次に列の値を取得するという流れになる。

先にどこかの初心者ページででも、ResultSetの使い方をまずしっかり把握しよう。

もっとも、この場合は別のやり方でSELECT COUNTを代用することもでき、その方が効率が良い。
executeUpdate()を調べてみよう。

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名