我从 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());
}
你可以用双倍的省略符号代替省略号,但是最好的方法是使用 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);
是单引号‘的问题
解决办法
在写SQL语句之前检查一下参数,把参数中所有的单引号替换成2个单引号。
如:
" I' m John " -> " I'' m John "