2011-12-26 51 views
0

我使用了一個關鍵字過濾器,用於從db中填充的列表,它工作的很好。想象一下列表中包含一個短語'A big bat',還有其他以'b'開頭的單詞,比如書籍等。當我給「b」在搜索領域的短語「A大蝙蝠」先出現,然後隻字以「b'.Please幫我解決它 請參閱我的代碼關鍵字blackberry中的字段

public final class KeywordFilter 
{ 
    private KeywordFilterField _keywordFilterField;  
    private WordList _wordList; 
    private Vector _words; 


    public KeywordFilter() 
    {  

     _words = getDataFromDatabase(); 

     if(_words != null) 
     { 

      _wordList = new WordList(_words);   


      _keywordFilterField = new KeywordFilterField();     
      _keywordFilterField.setSourceList(_wordList, _wordList);  


      CustomKeywordField customSearchField = new CustomKeywordField(); 
      _keywordFilterField.setKeywordField(customSearchField);      


      KeywordFilterScreen screen = new KeywordFilterScreen(this); 


      screen.setTitle(_keywordFilterField.getKeywordField());    


      screen.add(_keywordFilterField); 
      UiApplication ui = UiApplication.getUiApplication(); 

      ui.pushScreen(screen); 

     } 
     else 
     { 
      UiApplication.getUiApplication().invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        Dialog.alert("Error reading data file."); 
        System.exit(0); 
       } 
      }); 
     }  
    } 


    KeywordFilterField getKeywordFilterField() 
    { 
     return _keywordFilterField; 
    } 


    private Vector getDataFromDatabase() 
    { 
     Vector words = new Vector(); 
     Database d; 
      for(;;) 
      { 
       try 
       { 
        URI myURI=URI.create("file:///SDCard/Databases/MyTestDatabase.db"); 
        d=DatabaseFactory.open(myURI); 
        Statement st=d.createStatement("select (select distinct group_concat(eng) fromEnglish),group_concat(mal) from English e ,Malayalam m where e.Ecode=m.Mcode group by eng"); 
        st.prepare(); 
        net.rim.device.api.database.Cursor c=st.getCursor(); 
        Row r; 

        while(c.next()) 
        { 

        r=c.getRow(); 
        String w=r.getString(0); 
        String meaning=r.getString(1); 

        words.addElement(new Word(w,meaning)); 
        } 
        st.close(); 
        d.close(); 
        } 
        catch (Exception e) 
     {   
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     }      


      return words;   
     } 

    } 


    void addElementToList(Word w) 
    {  
     _wordList.addElement(w); 
     _keywordFilterField.updateList();  
    } 


    final static class CustomKeywordField extends BasicEditField 
    { 

     CustomKeywordField() 
     { 

      super(USE_ALL_WIDTH|NON_FOCUSABLE|NO_LEARNING|NO_NEWLINE); 

      setLabel("Search: "); 
     } 


     protected boolean keyChar(char ch, int status, int time) 
     { 
      switch(ch) 
      { 
       case Characters.ESCAPE: 

        if(super.getTextLength() > 0) 
        { 
         setText("");       
         return true; 
        } 

      }     
      return super.keyChar(ch, status, time); 
     }      


     protected void paint(Graphics graphics) 
     {    
      super.paint(graphics); 


      getFocusRect(new XYRect()); 
      drawFocus(graphics, true);       
     } 
    } 
} 



    class KeywordFilterScreen extends MainScreen 
{ 
    private KeywordFilter _app; 
    private KeywordFilterField _keywordFilterField;  

    public KeywordFilterScreen(KeywordFilter app) 
    { 

     _app = app; 


     _keywordFilterField = _app.getKeywordFilterField(); 



    } 


    protected boolean keyChar(char key, int status, int time) 
    { 
     if (key == Characters.ENTER) 
     { 
      displayInfoScreen(); 
      // Word w = (Word)_keywordFilterField.getSelectedElement(); 
      // Status.show(w.getMeaning()); 

      return true; 
     }    
     return super.keyChar(key, status, time); 
    }  


    public boolean invokeAction(int action) 
    {   
     switch(action) 
     { 
      case ACTION_INVOKE: 

       displayInfoScreen(); 

       return true; 
     }  
     return super.invokeAction(action); 
    } 


    private void displayInfoScreen() 
    { 

     Word w = (Word)_keywordFilterField.getSelectedElement(); 
     if(w != null) 
     {    
      InfoScreen infoScreen = new InfoScreen(w); 
      UiApplication ui=UiApplication.getUiApplication(); 
      ui.pushScreen(infoScreen); 


     } 
    } 


    public boolean onSavePrompt() 
    { 
     return true; 
    } 



    private final static class InfoScreen extends MainScreen 
    { 

     InfoScreen(Word w) 
     { 

      setTitle(w.toString());    
      BasicEditField popField = new BasicEditField(" ",w.getMeaning(),300,Field.NON_FOCUSABLE); 

      FontManager.getInstance().load("DC124.TTF", "MyFont", FontManager.APPLICATION_FONT) ; 
     { 
      try { 
       FontFamily typeface = FontFamily.forName("MyFont"); 
       Font myFont = typeface.getFont(Font.PLAIN, 25); 
       popField.setFont(myFont); 
       add(popField); 
      } catch (ClassNotFoundException ex) { 
       ex.printStackTrace();} 

      } 




     }   
    }  
} 

回答

0

我想你正在使用像下面的查詢

select colomname from tablename where colomname GLOB '%b%'; 

在這裏你得到所有的名稱wh ICH是包含字母「b」(區分大小寫) 如果你想這是strted與字母的所有單詞「B」的使用應該writr查詢像

select colomname from tablename where colomname GLOB 'b%' order by colomname ; 

我在這裏使用「GLOB」它給案件敏感放出來的記錄,如果你不需要區分大小寫的,那麼你可以使用「喜歡」鍵字

感謝

+0

請看我的代碼我沒有使用過那樣的東西 – j2me 2011-12-26 10:50:03

0

該查詢是對您有用:

SELECT名字來自員工,其中娜我喜歡按名稱排列的'%d%';

這裏名稱是我的專欄名稱;

試試這個;

相關問題