【发布时间】:2012-09-18 20:51:24
【问题描述】:
我有一个函数正在对 SQLite 数据库中的表执行查询。我声明一个常量:public static final String CANADA_HISTORY = "Canada's History";。这存储在String 变量中,比如说difficulty,
我有一个问题:
Cursor c = mDb.rawQuery("select * from Questions_answers where CHAPTERS = '"+difficulty+"'" , null);
它在撇号附近抛出异常。
Logcat 输出:
I/Database( 1170): sqlite returned: error code = 1, msg = near "s": syntax error
D/AndroidRuntime( 1170): Shutting down VM
W/dalvikvm( 1170): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime( 1170): FATAL EXCEPTION: main
E/AndroidRuntime( 1170): android.database.sqlite.SQLiteException: near "s": syntax error: , while compiling: select * from Questions_answers where CHAPTERS = 'Canada's History'
我也试过了:
1. difficulty=difficulty.replaceAll("'","''");
2. difficulty=difficulty.replaceAll("'","\'");
3. difficulty = DatabaseUtils.sqlEscapeString(difficulty);
除此之外,它对像 Canada History 这样的单个词很有效,我的意思是没有特殊字符词。
请给我解决问题的建议谢谢。
【问题讨论】:
-
尝试使用
selectionArgs,例如:rawQuery("select * from table where chapters = ?", new String[] { difficulty } );
标签: android sqlite special-characters