1

我从我的 sqlite 数据库中选择数据。我的问题是,当数据库中有撇号(例如“我是约翰”)并且我尝试选择数据时,我的应用程序崩溃了。

如果我在数据库中没有撇号,那么一切都很好。

我的选择数据功能:

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()withselectionArgs而不是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);
于 2012-10-15T17:42:48.830 回答
3

这是任何 SQL 的问题,因为单引号(撇号)是文本分隔符。在您的数据中,您必须将撇号替换为另一个字符,或者将单个撇号替换为双撇号。

Daniel O'Neil

变成

Daniel O''Neil

[编辑] UgglyNoodles 的推荐更好。

于 2012-10-15T17:42:43.820 回答