if (name.trim().equals(ZYName.trim())) { try { PreparedStatement pstmt2 = conn.prepareStatement(sql2); ResultSet rs2 = pstmt2.executeQuery(); while(rs2.next()){ %> <tr> <td><%=rs2.getString("A")%></td> <td><%=rs2.getString("B")%></td> <td><%=rs2.getString("C")%></td> <td><%=rs2.getString("D")%></td> <td><%=rs2.getString("E")%></td> <td><%=rs2.getString("F")%></td> </tr> <% } pstmt2.setString(1,name); count = pstmt2.executeUpdate(); pstmt2.close(); } catch (SQLException e) { e.printStackTrace(); } break; }else{ System.out.print("查无此药"); } 为什么会输出查无此药
时间: 2024-02-14 11:08:27 浏览: 149
在这段代码中,只有当"if"语句的条件成立时,才会执行try语句块中的代码。条件是"if (name.trim().equals(ZYName.trim()))",其中name和ZYName是字符串类型的变量,trim()方法用于去除字符串两端的空格。
因此,如果输入的药名与ZYName相等,就会执行try语句块中的代码,否则会执行else语句块中的代码,即输出"查无此药"。
可能的原因是输入的药名与ZYName不相等,或者输入的药名与ZYName相等但是在数据库中没有与之匹配的记录。您可以在代码中添加一些调试语句,例如打印出输入的药名和ZYName以及查询结果集中的数据,以帮助您找到问题所在。
相关问题
String name = new String(request.getParameter("ZY").getBytes("ISO-8859-1"), "UTF-8"); System.out.print(name); if (name == null || name.isEmpty()) { %> <a href="SouSuo.jsp">请输入中药名称,点击返回重新输入</a> <% }else{ Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = SQLConn.openDB(); stmt = conn.createStatement(); // 执行查询等操作 String sql = "select ZYName,YLName,YDY,YX,GX,ZhongYao.ZZ as ZZ from Yaolei,ZhongYao where Yaolei.YLID=ZhongYao.YLID"; PreparedStatement pstmt = conn.prepareStatement(sql); //pstmt.setString(1, "%" + name + "%"); rs = pstmt.executeQuery(); int count = 0; if(rs.next()){ while (rs.next()) { String ZYName = rs.getString("ZYName"); System.out.print(name); if (name.trim().equals(ZYName.trim())) { // if (name.trim().equals(A.trim())) { %>为什么name.trim().equals(ZYName.trim())不成立
可能是因为在数据库中查询出来的`ZYName`前或后有空格或其他不可见字符,导致字符串比较不相等。可以将`System.out.print()`语句放在字符串比较之前打印出两个字符串的值,看看是否有差异。另外,可以使用`String`类的`trim()`方法去除字符串两端的空格再进行比较,或者使用`equalsIgnoreCase()`方法忽略大小写进行比较。具体代码可以这样写:
```java
String name = new String(request.getParameter("ZY").getBytes("ISO-8859-1"), "UTF-8");
System.out.println("name: " + name); // 打印name的值
if (name == null || name.isEmpty()) {
// ...
} else {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = SQLConn.openDB();
stmt = conn.createStatement();
String sql = "select ZYName,YLName,YDY,YX,GX,ZhongYao.ZZ as ZZ from Yaolei,ZhongYao where Yaolei.YLID=ZhongYao.YLID";
PreparedStatement pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
int count = 0;
while (rs.next()) {
String ZYName = rs.getString("ZYName").trim(); // 去除两端空格
System.out.println("ZYName: " + ZYName); // 打印ZYName的值
if (name.equalsIgnoreCase(ZYName)) { // 忽略大小写比较
// ...
}
}
} catch (Exception e) {
// ...
} finally {
// ...
}
}
```
找bugif (name.trim().equals(ZYName.trim())) { try { PreparedStatement pstmt2 = conn.prepareStatement(sql2); ResultSet rs2 = pstmt2.executeQuery(); while(rs2.next()){ String A = rs2.getString("A"); if (name.trim().equals(A.trim())) { %> <tr> <td><%=rs2.getString("A")%></td> <td><%=rs2.getString("B")%></td> <td><%=rs2.getString("C")%></td> <td><%=rs2.getString("D")%></td> <td><%=rs2.getString("E")%></td> <td><%=rs2.getString("F")%></td> </tr> <% } } pstmt2.setString(1,name); count = pstmt2.executeUpdate(); pstmt2.close(); } catch (SQLException e) { e.printStackTrace(); } break; }else{ System.out.print("查无此药"); }
在这段代码中,有一个潜在的 bug,即当 `name.trim().equals(ZYName.trim())` 不成立时,只是简单地输出了一条信息 `查无此药`,但并没有终止程序继续执行。这可能会导致程序继续执行下去,执行不必要的 SQL 查询,并且可能引发其他异常。为了修复这个问题,您可以在输出 `查无此药` 后添加 `return` 语句,以终止程序的执行。例如:
```
System.out.print("查无此药");
return;
```
这样,当 `name.trim().equals(ZYName.trim())` 不成立时,程序就会输出信息并立即退出,避免不必要的代码执行。
阅读全文