2011-06-24 108 views
0

我在資產目錄中的數據庫上遇到Eclipse上的rawquery錯誤。數據庫「預加載」了表和數據,SQL字符串(第一條註釋行)在SQLite數據庫瀏覽器中工作。當我將SQL字符串複製到代碼並修改以刪除引號時,它會出錯。下面的代碼是從'標準'公共類DataBaseHelper擴展SQLiteOpenHelper {。我是新來的android/java,並希望任何幫助或建議。SQLite rawquery

 public Cursor getAllSectionDescriptions(String DBtable, String source){ 
    //Works in DB: SELECT "Description" FROM "SectionProps" WHERE Source = "UK"   
    //String q = "SELECT Description FROM SectionProps WHERE Source = UK " ; <= errors in code 
    String q = "SELECT Description FROM " + DBtable + " WHERE Source = " + source + " "; //<== errors in code 
    //06-24 16:53:03.373: ERROR/AndroidRuntime(1000): Caused by: android.database.sqlite.SQLiteException: no such table: SectionProps: , while compiling: SELECT Description FROM SectionProps WHERE Source = UK 

    Cursor mCursor = myDataBase.rawQuery(q, null); 
    mCursor.moveToFirst(); 
    return mCursor; 

}//end cursor 

回答

0

看起來你必須在你的對象名稱周圍加雙引號。所以,你要做到這一點:

String q = "SELECT \"Description\" FROM \"" + DBtable + "\" WHERE Source = \"" + source + "\" "; 

的說明轉義字符開頭的雙引號「\」

0

執行查詢,有兩種方法:執行db.rawQuery方法執行db.query方法執行一個原始查詢檢索所有部門:

Cursor getAllDepts() 
    { 
    SQLiteDatabase db=this.getReadableDatabase(); 
    Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id, 
     "+colDeptName+" from "+deptTable,new String [] {}); 

    return cur; 
    } 

的rawQuery方法有兩個參數:如果WHERE子句包括在SELECT語句中的注意事項參數:查詢字符串:select語句的String []選擇ARGS查詢的結果在Cursor中返回目的。在select語句中,如果表的主鍵列(id列)的名稱不是_id,那麼必須使用SELECT [Column Name]形式的別名作爲_id,因此Cursor對象始終需要主鍵鍵列的名稱是_id,否則會引發異常。