查询按字母顺序搜索名称

时间:2011-04-02 05:44:00

标签: sql

我使用了LIKE条件,但它要求我在数据库中输入全名来查找名称。

if (searchby.equals("Name"))
{
    try
    {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        System.out.println("\n Driver loaded");
        Connection con=DriverManager.getConnection("jdbc:odbc:wanisamajDB");
        Statement stmt=con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT Name FROM FAMILYcensus WHERE Name LIKE '"+ tfsearch.getText()+"'");
        //  ResultSet rs = stmt.executeQuery("SELECT Name FROM FAMILYcensus WHERE Name LIKE );
        System.out.println("Hi");

        rs.next();
        String names = rs.getString("NAME");
        System.out.println("NAME: " + names );

        JOptionPane.showMessageDialog(null, "RECORD FOUND");

        tasearch.setText(names);
    }
    catch (Exception e)
    {
        System.out.println("EXCEPTION " + e);
    }

5 个答案:

答案 0 :(得分:0)

我并不清楚地理解你的问题,但根据我的理解,我会发布一些可能有助于解决问题的内容。

将您的搜索字符串放在%中,因为EmCo评论了"'%"+ tfsearch.getText()+"%'"

当您忽略其中任何一个时,搜索字符串之前和之后的%具有不同的用途。有关如何使用它,请参阅 String Comparison Functions

现在你的另一个问题是:

您希望按字母顺序排列名称。为此,您需要包含ORDER BY。然后你的查询字符串将是。

"SELECT 
        Name 
   FROM FAMILYcensus 
  WHERE Name LIKE '%" + tfsearch.getText() +"%' 
  ORDER BY Name ASC"

您的搜索结果可能不止一个。仅使用rs.next();String names = rs.getString("NAME");将只获得我猜的第一条记录。

您可以尝试以下代码:

List<String> names = new ArrayList<String>();
while(rs.next){
    names.add(rs.getString('Name'));
}

我提供的代码未经过测试。虽然它会像那样或类似的。如果您当前的代码仍有问题,请试试。

答案 1 :(得分:0)

您需要遍历结果集:

while (rs.next()) {
    String name = rs.getString("Name");
    System.out.println("Name: " + name);
}

看起来你有它并评论出来了吗?如果你想将它存储在一个列表中,你就可以了。如果您想将String的所有结果放入tasearch.setText(),您可以:

StringBuilder sb = new StringBuilder();
while (rs.next()) {
    String name = rs.getString("Name");
    sb.append(name + " ");
}
String names = sb.toString().trim();
tasearch.setText(names);

答案 2 :(得分:0)

WhiteFang34还说你需要迭代。但是您还需要更改为WHERE子句:

"SELECT * FROM FAMILYcensus WHERE Name > '"+ tfsearch.getText()+"' ORDER BY Name ASC LIMIT "+MAXRESULTS;

请注意,限制结果数量是一个好主意。

答案 3 :(得分:0)

而不是

StringBuilder sb = new StringBuilder();

sb.append(name + " ");

DO

List names = new ArrayList<String>();

names.add(name);

答案 4 :(得分:0)

而不是:

StringBuilder sb = new StringBuilder();
while (rs.next()) {
String name = rs.getString("Name");
sb.append(name + " ");
}

使用此:

List<String> lstNames = new ArrayList<String>();
while (rs.next()) {
   lstNames.add(rs.getString("Name"));
}