1

次のコードを使用して、サーブレットから応答を取得しています。変数「get」の指定された名前が特定のテーブルにあるかどうかを確認し、1存在する場合は出力します。

サーブレット コードの一部:

get = request.getParameter("nam");// such as get="kannan"
try {
    // Connection code

    ResultSet rs = stmt
            .executeQuery("select * from newfarmer where rname='" + get
                    + "'");
    while (rs.next()) {
        username = rs.getString("rname");

        if (get.equals(username)) {
            out.println(1);
        }

    }
} catch (Exception e) {
    out.println(e.toString());
}

私の Android アプリケーションでは、この応答を次のように確認します。

response = CustomHttpClient.executeHttpPost(
        "http://moberp.svsugar.com:8080/androidservlt/Modify",
        postParameters);
String res = response.toString();
res = res.trim();

if (res.equals("1")) {
    flag = 1;
    Toast.makeText(getBaseContext(), "Correct", Toast.LENGTH_LONG)
            .show();
} else {
    flag = 2;
    Toast.makeText(getBaseContext(), "please enter correct Ryot name",
            Toast.LENGTH_LONG).show();
}

単一のレコードでは非常にうまく機能します。つまり、テーブル「newfarmer」では、「rname」が複数の同じ名前で構成されている場合、else 部分のみが実行されます。

例: テーブルで「kannan」が 2 回表示された場合 サーブレットの出力は次のようになります。

1 1

Android アプリケーションでは、応答が 1 ではないため、明らかに else 部分が実行されます。これは、2 つの同じ名前の場合のみです。テーブルには 10 を超える同じ名前が含まれる場合があります。10 個の同じ名前の場合、サーブレットの出力は次のようになります。

1 1 1 1 1 1 1 1 1 1

だから私はすべてをチェックする必要があります。そのため、if 条件を変更する必要がありますが、どうすればよいかわかりません。誰か答えてください。

前もって感謝します

4

4 に答える 4

2

while ループの代わりに使用

if(rs.next())

これで、1 回だけ印刷されます。

アンドロイドは変わらない

于 2013-01-25T06:58:49.567 に答える
1

SQL クエリに句get.equals(username)がある場合に false と評価される理由がわかりません。where

だからこれを試してみてください。

if(rs.next()) 
{    
              // The above condition will make the code inside if executed 
              // only if any matching record is found and 
              //hence it will print `1` only once 
              //if any matching record is found. 
   username=rs.getString("rname");

   if(get.equals(username))
   {
       out.println(1);
   }

}

またstmt.executeQuery("select * from newfarmer where rname='"+get+"'"); 、SQL インジェクションの影響を受けやすいものを使用しています。

したがって、代わりに準備済みステートメントを使用することをお勧めします。

于 2013-01-25T06:08:19.997 に答える
1

サーブレットでこれを行う

if(rs.next())

           {
               username=rs.getString("rname");

             if(get.equals(username))
             {
                   out.println(1);
             }

           }

}

レコードが存在する場合、このループは 1 回だけ実行されます。

于 2013-01-25T06:06:47.683 に答える
0

試してみてくださいif(rs.next())、これはきっとあなたを助けるでしょう

于 2013-01-25T07:13:41.370 に答える