我正在使用以下代码从servlet获取响应。它将检查变量“get”中的给定名称是否在特定表中,如果存在则打印1
。
servlet代码的一部分:
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次,则Servlet输出为
1 1
现在在android应用程序中,显然else部分被执行,因为响应不是1。 这只是两个相同名称的情况。该表可能包含10个以上的相同名称。 如果有10个相同的名称,则servlet输出为
1 1 1 1 1 1 1 1 1 1
所以我需要检查所有。 所以我需要在if条件下进行更改,但我不知道该怎么做。有人请回答。
提前致谢
答案 0 :(得分:2)
而不是while循环使用
if(rs.next())
现在只打印一次。
android没有变化
答案 1 :(得分:1)
执行此操作
如果(rs.next())
{
username=rs.getString("rname");
if(get.equals(username))
{
out.println(1);
}
}
}
如果记录存在,此循环现在只运行一次。
答案 2 :(得分:1)
我不明白为什么当你的SQL查询中有get.equals(username)
子句时,where
会评估为false?
所以试试吧。
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注入。
所以最好更好地使用预备语句。
答案 3 :(得分:0)
尝试if(rs.next())
,
这肯定会帮助你