我試圖查詢我在代碼中創建的單個表數據庫。據我所知,數據庫正在被正確創建。該查詢應該用於填充ListView,但是當我嘗試使用從查詢產生的光標創建SimpleCursorAdapter時,它會崩潰:java.lang.IllegalArgumentException:column'_id'不存在。我假設這可以追溯到遊標,並且遊標似乎是空的。從Android中的數據庫填充列表
數據庫在以下方式中的onCreate內我實施SQLiteOpenHelper的創建():
db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name TEXT NOT NULL, title TEXT NOT NULL, path TEXT NOT NULL);");
然後實際的查詢是建立和執行我的DataHelper類,這是用於互動與數據庫:
public Cursor selectEntryStartsWith(String partialName , String title)
{
String where = "name LIKE '" + partialName + "%' AND title LIKE '" + title + "'";
if (title== null || title.equals("")){
where = "name LIKE '" + partialName + "%'";
}
Cursor cur = mDatabase.query(TABLE_NAME, new String[] {"_id", "name", "title"}, where, null, null, null, "name");
return cur;
}
使用該光標的代碼如下:
Cursor cursor = mDataHelper.selectEntryStartsWith("ex", null); //get all entries that start with "ex"
String [] from = new String [] { "name", "title" };
int [] to = new int [] { R.id.name, R.id.title };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(mContext, R.layout.listview_entry, cursor, from, to);
songList.setAdapter(adapter);
我使用製表符來最後一段代碼來自片段的onActivityCreated();我不是說擴展ListFragment可能會更好,但我不認爲這是特別的問題。
對不起,如果我錯過了您可能需要的信息,我一直在這個問題上撞了一段時間。
我不知道,我知道如何來決定是否應該有我的數據庫中的數據。我的平板電腦沒有植根,我沒有權限通過eclipse中的文件資源管理器訪問/ data文件夾,我錯過了什麼或有其他方法嗎?我假設那裏有數據,但是像你說的我應該先嚐試並確定。感謝您的幫助 – cpretty
在模擬器中試試它,您將可以訪問該文件夾。你也可以跳過第1部分,並在代碼中查詢你的數據庫,只是試着循環代碼中的結果,而不是把它放到適配器中,只是爲了確保你有數據。但能夠看到數據庫更好。另一種獲取數據庫的方法是將java代碼中的文件複製到SD卡中。你應該可以訪問它。 –
因此,由於某些原因,我仍然無法通過模擬器訪問文件。至於查詢我的代碼中的數據庫,這就是我一直在嘗試做的事情,但返回的遊標似乎不是有效的。在調試過程中查看遊標,查詢數據庫後mCount爲-1,這對返回的遊標是什麼意思? – cpretty