按字母顺序搜索名称的查询

问题描述:

我已使用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); 
    } 
+1

怎么样使用''%操作是这样的:'选择的名字从FAMILYcensus WHERE名称LIKE“%“+ tfsearch.getText()+ “%'”' – EmCo 2011-04-02 06:06:03

+0

'SELECT * FROM FAMILYcensus WHERE Name LIKE'%“+ tfsearch.getText()+”%'ORDER BY名称ASC“''tfsearch'这里是一个'JTextField'? – khachik 2011-04-03 09:27:37

+0

如果我明白这个问题,你需要在带有回车符的垂直列表中的名字,而不是在同一行。问题是这一行:sb.append(name +“”);而不是“”,你应该使用System.getProperty(“line.separator”) – MeBigFatGuy 2011-04-04 04:46:50

我不是很清楚你的问题,但从我的理解,我会发布一些可能有助于解决你的问题。

把你的搜索字符串中的%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')); 
} 

我提供了未经测试的代码。虽然它会是这样或类似的。如果您的当前代码仍然存在问题,请尝试一下。

+0

soory先生现在与我的帮助我得到的结果alphabeticaly,但它只显示在textarea只有信号名称我想所有的名字开头字母从我的数据库文本框 – amol 2011-04-02 11:03:15

+0

你是什么意思单名?是单一结果吗?如果是的话,你在我的文章中使用了while循环。如果没有那可能是你需要的答案。你也需要在你的textarea中循环结果。显示时请提供代码。 – ace 2011-04-02 14:26:04

您需要遍历结果集:

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

它看起来像你有它,评论它呢?如果你想把它存储在一个列表中,你就对了。如果你想要把所有的结果为Stringtasearch.setText()你可以:

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

WhiteFang34也表示需要迭代。但是,您还需要更改为WHERE子句:

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

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

+1

*“请注意,限制结果数量是一个好主意。”* - 您正在对可能不合理的要求做出假设。也许更好的想法是以不同的方式显示结果。 – 2011-04-03 11:07:00

而不是

StringBuilder sb = new StringBuilder(); 

sb.append(name + " "); 

List names = new ArrayList<String>(); 

names.add(name); 

而不是这样的:

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")); 
}