2012-09-03 60 views
1

我想在數據庫中查詢。數據庫沒有在應用程序中創建,我已經創建了外部,並且我正在使用this tutorial作爲解釋。但是我有一個與列_id相關的錯誤。 在類DatabaseHelper,我有以下代碼:Android SQLite列_id錯誤,

public Cursor Search(Context context,String search){ 
     SQLiteDatabase db= getReadableDatabase(); 
     String cursorFactory = "SELECT * FROM words WHERE eng || ' ' || rus LIKE ?"; 
     Cursor cursor = db.rawQuery(cursorFactory, new String[]{"%" + search + "%"}); 
     return cursor; 
       } 

活動中,我寫的代碼是:

public void search(View v){ 
      text2search= searchText.getText().toString(); 
      cursor= myDbHelper.Search(mContext, text2search); 
      adapter =new SimpleCursorAdapter(getBaseContext(),R.layout.list_item, 
         cursor, 
         new String[]{"rusword","engword","kind"}, 
         new int[]{R.id.rusWord,R.id.engWord,R.id.knd}); 
      wordsList.setAdapter(adapter);    
     } 

而且我得到了_id相關的錯誤:(在logcat中)

09-03 14:12:38.018:E/AndroidRuntime(16581): java.lang.IllegalArgumentException異常:列 '_id' 不存在

致3210

但數據的基礎上,我創造,它有「_id」列:(我不能上傳圖片,所以這裏是鏈接https://www.dropbox.com/s/9a2ol1acrnxmzob/sql-db-rusWjpg.png

謝謝!

+0

試着問沒有'*'的db,但是用'「_id,rusword,engword,kind」'......如果re不是'_id'列,你應該得到錯誤... – Selvin

回答

1

所以問題不是太棘手。一些適配器,在你的情況下,SimpleCursorAdapter這個適配器在嘗試選擇你需要選擇的東西時需要選擇列_id。 所以試試這個:

new String[] {"_id", "rusword", "engword", "kind"} 
String cursorFactory = "SELECT _id, [next columns] FROM ...; 

現在它應該工作。

類似的問題在這裏:

注:在這種情況下,你不希望有_id欄你可以使用這個簡單的一招:

SELECT keyID AS _id FROM TableName 
+0

除了Note ... keyID(如果你已經定義了key)或者只是像'ROWID一樣的特殊SQLite列作爲_id' – Selvin

+0

你是對的人。我剛纔注意到他想要有名爲id或keyID的列f.e. 'private static final String KEYID =「id {or idCustomer etc ..}」' – Sajmon