2012-06-12 90 views
2

我想從基於字符串的textview中的數據庫中選擇特定的行。我運行它時的錯誤日誌似乎表示它正在尋找一個列,但它應該在尋找一行。錯誤日誌說:在Android中選擇SQLIte DB中的特定行

--I/Database(279): sqlite returned: error code = 1, msg = no such column: Book 
--D/AndroidRuntime(279): Shutting down VM 
--W/dalvikvm(279): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
--E/AndroidRuntime(279): FATAL EXCEPTION: main 
--E/AndroidRuntime(279): android.database.sqlite.SQLiteException: no such column: Book: , while compiling: SELECT book, background FROM bookbackgrounds WHERE book=Book 

在此處,它從TextView的字符串代碼,然後運行是應該在一個文本字符串的形式返回文件名的方法,然後顯示在返回的字符串第二個文本視圖:

   String bkString = showBooktextview.getText().toString(); 
      bga.open(); 
      String newBKstring = bga.getBGforBook(bkString); 
      bga.close();     
      showDBBooktextview.setText(newBKstring); 

以下是錯誤表示沒有該書名稱的列的方法。 (它應該是尋找包含該書名的ROW):

 public String getBGforBook(String bkString) { 
    String[] thecolumns = new String[] { KEY_BOOK, KEY_BACKGROUND }; 
    Cursor cursor = db.query(DB_TABLE, thecolumns, KEY_BOOK + "=" + bkString, null, null,  null, null); 
    String result = ""; 

    if (cursor != null){ 
     cursor.moveToFirst(); 
    result = result 
    + cursor.getString(1); 
    } 
    return null; 
    } 

那麼方法寫錯了嗎?如果是這樣,如何正確編寫它,以便它查找包含書名字符串的行?

回答

6

我認爲你缺少的條件表達式的單引號:

KEY_BOOK + "=" + bkString 

應該

KEY_BOOK + "='" + bkString + "'" 

由於串bkString不是引用,SQLite的嘗試解釋它作爲一個標識符列名

+0

添加單引號似乎使Eclipse完全忽略該方法,但它不會使應用程序崩潰。 – kirktoon1882

+0

@ kirktoon1882你是什麼意思「忽略方法」?它沒有回報你所期望的嗎?這可能是因爲你以任何方式返回null;你應該返回'result'。 – dasblinkenlight

+0

SWEET!你的修復工作!我並不感到驚訝,你有50.4k代表,顯然不是像我這樣的新人!好吧,所以你的評論是正確的,我是返回null,而不是「結果」。所以看起來這個方法沒有做任何事情,但是它在工作,而且它什麼也沒有返回。再次感謝!你的規則! – kirktoon1882