2013-09-30 23 views
0

我從SQLite數據庫填充listview,並且當我點擊一個項目時應用程序崩潰。我用「查詢」和「原始查詢」做了足夠的研究。在SQLite數據庫瀏覽器中也成功執行了rawquery語句,但仍然是相同的語句在我的代碼中不起作用。SQLite查詢執行崩潰Android應用程序

下面是我的ListView onitemclicklistener的代碼:

// Bookmark ListView Listener 
    bookmarkListView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent1, View view1, int position1, 
       long id1) { 
      String selectedBookmarkItem = ((TextView)view1).getText().toString(); 

      dbAdapter.read(); 

      Map<String, Object> bookmarkKV = dbAdapter.getSingleBookmark(selectedBookmarkItem); 
      String bookmarkedURL = (String) bookmarkKV.get(dbAdapter.BOOKMARK_ADDRESS); 

      dbAdapter.close(); 
      Toast.makeText(getBaseContext(), bookmarkedURL, Toast.LENGTH_LONG).show(); 
} 
}); 

方法getSingleBookmark代碼:

// Fetch Single Bookmark 
public Map<String, Object> getSingleBookmark(String bookmarkName1) throws SQLException{ 
    Map<String, Object> map1 = new HashMap<String, Object>(); 
    Cursor cursor1 = db.query(true, BOOKMARKS_TABLE, new String[] {BOOKMARK_ADDRESS}, 
      BOOKMARK_NAME + "=" + bookmarkName1, null, null, null, null, null); 

    if(cursor1 != null){ 
     cursor1.moveToFirst(); 
    } 

    String bookmarkAddress = cursor1.getString(cursor1.getColumnIndex(BOOKMARK_ADDRESS)); 
    map1.put(BOOKMARK_ADDRESS, bookmarkAddress); 
    //String bookmarkName = cursor1.getString(cursor1.getColumnIndex(BOOKMARK_NAME)); 
    //map1.put(BOOKMARK_NAME, bookmarkName); 

    return map1; 
} 

logcat的條目:

09-30 03:43:12.791: E/AndroidRuntime(29008): FATAL EXCEPTION: main 
09-30 03:43:12.791: E/AndroidRuntime(29008): android.database.sqlite.SQLiteException:  
no such column: gmail (code 1): , while compiling: SELECT DISTINCT bookmarkaddress 
FROM bookmarkstable WHERE bookmarkname=gmail 

當我點擊在 「Gmail的」 項目listview,該應用程序崩潰說:「不幸的是,應用程序已停止」。

但數據庫表中有一行「Gmail的」條目:

enter image description here

+0

看看這個查詢,它看起來像Gmail應該有單引號,例如, 'SELECT DISTINCT bookmarkaddress FROM bookmarkstable WHERE bookmarkname ='gmail'' –

+0

每當有東西崩潰,就會產生一個異常。您可以將這些數據寫入日誌文件並查看:) –

+0

您可以發佈您的數據庫類的onCreate方法代碼嗎? –

回答

2

的關鍵是錯誤消息:

no such column: gmail 

你看到它試圖運行查詢包括

WHERE bookmarkname=gmail 

您的查詢需要修改爲indi美食,這是一個字符串 - 在你的光標,更改:

BOOKMARK_NAME + "=" + bookmarkName1 

爲:

BOOKMARK_NAME + "='" + bookmarkName1 + "'" 

這會然後把「bookmarkName1」的值在單引號。

Selvin的編輯:或者甚至更好,使用的參數(使用它們會避免與含'串未來的問題):

db.query(true, BOOKMARKS_TABLE, new String[] {BOOKMARK_ADDRESS}, 
       BOOKMARK_NAME + "=?", 
       new String[] { bookmarkName1 }, 
null, null, null, null); 
+1

總之,它必須是'WHERE bookmarkname ='gmail''。 SQL中的所有字符串必須用單引號括起來:) –

+1

Lol感謝您清除那個;) – EvilGeniusJamie

+0

很高興我能幫忙! –

0

可能是你的應用程序使用舊版本的分貝。嘗試清除您的應用程序數據並再次運行您的程序。

希望使用原始查詢則必須用引號字符串,也逃避你的字符串配額總是在這有助於

0

(更換'\')。

最好的辦法是使用的選擇和選擇的參數,所以它是爲你做:

mContext.getContentResolver().query(Model.CONTENT_URI, null, SELECTION, 
        new String[] { ARGUMENT }, null); 

哪裏SELCTION包含?跡象,例如:name=?