2 clcurie 11 clcurie_11 于 2013.04.23 14:53 提问

在数据库中省略符号和选择数据时程序崩溃

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

2个回答

myq_26
myq_26   2013.04.23 16:31

你可以用双倍的省略符号代替省略号,但是最好的方法是使用 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);
zyc13701469860
zyc13701469860   2013.04.24 14:18

是单引号‘的问题
解决办法
在写SQL语句之前检查一下参数,把参数中所有的单引号替换成2个单引号。
如:
" I' m John " -> " I'' m John "

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!