gpt4 book ai didi

java - 类似名称的查询不起作用

转载 作者:行者123 更新时间:2023-11-29 12:01:06 25 4
gpt4 key购买 nike

假设用户输入 02522 作为 PIN 码,则应显示所有匹配结果以及其他 PIN 码,如 02521、02520 等。
我能够显示输入的确切结果,但无法显示其他匹配或附近的结果。
环境:Java Struts2。
下面是我的代码:

package org.entity;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List;
import java.util.ArrayList;

import com.opensymphony.xwork2.ActionSupport;

public class SearchBasedonBBAction extends ActionSupport {
BloodBank search2;
SearchBasedonBB search;
List<UpdateStock> BBList;
List<UpdateStock> BBList2;

public SearchBasedonBBAction() {

}

public SearchBasedonBB getSearch() {
return search;
}

public void setSearch(SearchBasedonBB search) {
this.search = search;
}

public List<UpdateStock> getBBList() {
return BBList;
}

public void setBBList(List<UpdateStock> bBList) {
BBList = bBList;
}

public BloodBank getSearch2() {
return search2;
}

public void setSearch2(BloodBank search2) {
this.search2 = search2;
}

public List<UpdateStock> getBBList2() {
return BBList2;
}

public void setBBList2(List<UpdateStock> bBList2) {
BBList2 = bBList2;
}

@Override
public String execute() throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/foryou", "root", "siddheshkk");
System.out.println("Driver Loaded");
Statement st = con.createStatement();
PreparedStatement ps = con
.prepareStatement("select * from stockinfo where stdcode=?");
ps.setString(1, search.getBbb());
BBList = new ArrayList<UpdateStock>();
BBList2 = new ArrayList<UpdateStock>();
ResultSet rs = ps.executeQuery();
while (rs.next()) {
BBList.add(new UpdateStock(rs.getString("name"), rs
.getString("city"), rs.getString("address"), rs
.getString("contact"), rs.getString("email"), rs
.getString("apositive"), rs.getString("anegative"), rs
.getString("bpositive"), rs.getString("bnegative"), rs
.getString("abpositive"), rs.getString("abnegative"),
rs.getString("opositive"), rs.getString("onegative")));
}
System.out.println("step2");
PreparedStatement ps1 = con
.prepareStatement("select * from stockinfo where stdcode like "
+ search.getBbb() + "");
System.out.println("step3");
ResultSet rs1 = ps1.executeQuery();
while (rs1.next()) {
BBList2.add(new UpdateStock(rs.getString("name"), rs
.getString("city"), rs.getString("address"), rs
.getString("contact"), rs.getString("email"), rs
.getString("apositive"), rs.getString("anegative"), rs
.getString("bpositive"), rs.getString("bnegative"), rs
.getString("abpositive"), rs.getString("abnegative"),
rs.getString("opositive"), rs.getString("onegative")));
}
System.out.println("Ye b hogya na baa...");
} catch (Exception e) {
e.printStackTrace();
}

return "success";
}

@Override
public void validate() {
// TODO Auto-generated method stub
super.validate();
if (search.getBbb().isEmpty()) {
addFieldError("search.bbb", "Please enter Pin Code");
}
}

}

查看我用 S.O.P. 编写的测试语句
程序被执行,但查询之类的名称没有给出任何输出,也没有错误。
当我在搜索框中输入 02522 时,我得到输出,但不显示 02520,02521 等 pincode 的其他结果。

有两个部分,第一部分给出精确结果,另一部分给出任何匹配的结果。就像在第一部分中一样,如果用户输入 02522,则会显示完全匹配的结果,而在其他部分中,应显示 02521,02523 的结果。
**注意:stdcode 在此表示 pincode(在 DB 中定义为 stdcode)**

最佳答案

当您说“附近的结果”时,我不确定您的意思。您说输入 02522 应匹配 02521 和 02520。SQL 中的 LIKE 不会执行此操作。 LIKE 的用法如下:

WHERE username LIKE '%hut%'

这将与我的用户名或任何带有“hut”的用户名匹配。

因此整个部分需要修复:

        PreparedStatement ps1 = con
.prepareStatement("select * from stockinfo where stdcode like "
+ search.getBbb() + "");

因为LIKE并不意味着“近似匹配”;它有更具体的含义,与字符串匹配有关。

如果你希望它在一定范围内匹配,那么你应该将其转换为整数并使用BETWEEN。您没有定义“附近”的含义,因此在您提供更具体的信息之前我们无法为您提供帮助。

关于java - 类似名称的查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32361944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com