查询按字母顺序搜索名称

我使用了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); } 

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

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

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

您需要迭代结果集:

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

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

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

代替

 StringBuilder sb = new StringBuilder(); 

 sb.append(name + " "); 

 List names = new ArrayList(); 

 names.add(name); 

而不是这个:

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

用这个:

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

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

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

当您省略其中任何一个时,搜索字符串之前和之后的%具有不同的用途。 有关如何使用它的字符串比较函数

现在你的另一个问题是:

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

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

您的搜索可能会导致多个搜索结果。 仅使用rs.next();String names = rs.getString("NAME"); 只会得到我猜的第一个记录。

你可以试试这段代码:

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

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