1

sqlite データベースからデータを選択します。私の問題は、データベースにアポストロフィ ("I'm John" など) があり、データを選択しようとすると、アプリケーションがクラッシュすることです。

データベースにアポストロフィがなければ、すべて問題ありません。

私のデータ選択機能:

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());
    }

助けてくれてありがとう。

4

2 に答える 2

6

アポストロフィを二重のアポストロフィに置き換えることで特別に処理できますが、最良の方法はの代わりにquery()withを使用することです。selectionArgsrawQuery()

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);
于 2012-10-15T17:42:48.830 に答える
3

これは、一重引用符 (アポストロフィ) がテキスト区切り文字であるため、どの SQL でも問題になります。データでは、アポストロフィを別の文字に置き換えるか、単一のアポストロフィを二重のアポストロフィに置き換える必要があります。

Daniel O'Neil

になる

Daniel O''Neil

[編集] UgglyNoodles の推奨事項の方が優れています。

于 2012-10-15T17:42:43.820 に答える