2015-09-27 80 views
0

我正在使用以下代码来搜索“英文”列。还有另一个栏目叫做“BANGLA”。我应该如何修改代码,以便同时搜索“ENGLISH”和“BANGLA”列并作为组合结果返回?如何实现Android Sqlite Union rawQuery?

public List<Bean> getWords(String englishWord) { 
     if(englishWord.equals("")) 
      return new ArrayList<Bean>(); 

     String sql = "SELECT * FROM " + TABLE_NAME + 
       " WHERE " + ENGLISH + " LIKE ? ORDER BY " + ENGLISH + " LIMIT 100 "; 

     SQLiteDatabase db = initializer.getReadableDatabase(); 

     Cursor cursor = null; 
     try { 
      cursor = db.rawQuery(sql, new String[]{"%" + englishWord + "%"}); 

      List<Bean> wordList = new ArrayList<Bean>(); 
      while(cursor.moveToNext()) { 
       int id = cursor.getInt(0); 
       String english = cursor.getString(1); 
       String bangla = cursor.getString(2); 
       String status = cursor.getString(3); 
       wordList.add(new Bean(id, english, bangla, status)); 
      } 

      return wordList; 
     } catch (SQLiteException exception) { 
      exception.printStackTrace(); 
      return null; 
     } finally { 
      if (cursor != null) 
       cursor.close(); 
     } 
    } 

我体改的String sql

String sql = "SELECT * FROM " + TABLE_NAME + 
       " WHERE " + ENGLISH + " LIKE ? ORDER BY " + ENGLISH + " LIMIT 100 " + " UNION ALL " + " SELECT * FROM " + TABLE_NAME + 
       " WHERE " + BANGLA + " LIKE ? ORDER BY " + ENGLISH + " LIMIT 100"; 

但是,这是行不通的。我收到此错误:

ORDER BY clause should come after UNION ALL not before (code 1): , while compiling: SELECT * FROM words WHERE en_word LIKE ? ORDER BY en_word LIMIT 100 UNION ALL SELECT * FROM words WHERE bn_word LIKE ? ORDER BY en_word LIMIT 100 
+0

这不起作用? – e4c5

+0

你得到了什么确切的错误?难道你没有添加第二个选择参数? 'cursor = db.rawQuery(sql,new String [] {“%”+ englishWord +“%”,“%”+ englishWord +“%”});' – jyanks

+0

我越来越'wordList == null 。我按照建议添加了第二个选择参数,但仍然无效。 – user2872856

回答

1

您需要ORDER BY和LIMIT移动到结束这样的:

SELECT * FROM TABLE_NAME 
WHERE ENGLISH LIKE ? 
UNION ALL 
SELECT * FROM tull 
WHERE BANGLA LIKE ? 
ORDER BY ENGLISH LIMIT 100 

不过100行这个总订货会只有英语和限制。每种语言你需要100行吗?如果你想通过这两种语言来命令你可以通过别名别名列和顺序:

SELECT *, ENGLISH AS TEXT FROM tull 
WHERE ENGLISH LIKE ? OR BANGLA LIKE ? 
UNION ALL 
SELECT *, BANGLA AS TEXT FROM tull 
WHERE BANGLA LIKE "" 
ORDER BY TEXT LIMIT 100; 

你仍然需要第二个选择参数添加在评论中提到jyanks。

+0

谢谢。这解决了我的问题。 – user2872856