2012-10-15 14 views
0

我從我的sqlite數據庫中選擇數據。我的問題是,當在數據庫中有撇號(例如「我是約翰」),我嘗試選擇數據,然後我的應用程序崩潰。Android - 崩潰時,我有數據庫中的撇號和選擇數據

如果我在數據庫中沒有撇號,那麼一切都是正確的。

我的選擇數據功能:

String query = "SELECT * FROM " + mainCollumn + " WHERE used=0 " + " AND season <= " + seasons + " ORDER BY RANDOM() LIMIT " + count ; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(query, null); 

    if(cursor.moveToFirst()){ 
     do { 
      Question question = new Question(Integer.parseInt(cursor.getString(0)), 
        cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5), 
        Integer.parseInt(cursor.getString(6))); 

      questionList.add(question); 
     }while(cursor.moveToNext()); 
    } 

感謝您的幫助。

+0

需要更多信息。你有日誌或調試器輸出? – Ralgha

+1

使用'?'和'selectionArg'參數可以解決這個問題:'db.rawQuery(query,new String [] {seasons})''。 **也**這不是必須的:'Integer.parseInt(cursor.getString(0))',只需使用:'cursor.getInt(0)'。 – Sam

回答

5

您可以通過用雙撇號替換它們來特別處理撇號,但最好的方法是使用query()selectionArgs而不是rawQuery()

SQLiteDatabase db = this.getReadableDatabase(); 
String[] columns = new String[] {column1, column2}; // the columns you want 
Cursor cursor = db.query(mainCollumn, String[] columns, "used=0 and season<=?", new String[] {seasons}, null, null, "RANDOM() LIMIT " + count); 
+0

感謝它現在的作品:) – kolek

3

這是任何SQL的單引號(撇號)是文本分隔符的問題。在您的數據中,您必須用另一個字符替換撇號或用雙撇號替換單個撇號。

Daniel O'Neil 

成爲

Daniel O''Neil 

[編輯] UgglyNoodles的建議爲好。