SQLite:转义特殊字符

时间:2015-08-31 16:22:38

标签: android sqlite

Android中是否有一种通用的方法来逃避SQLite数据库中不允许的所有字符?例如,“你是我”。而不是我找出不允许的每一个字符,并创建一堆或替换语句。我正在寻找以下内容。

value = SQLite.escapeString(value);
ContentValues contentValues = new ContentValues();
contentValues.put("name", value);
getContentResolver().insert(CONTENT_URI, contentValues);

//Retrieve data
Cursor cursor = getContentResolver().query(CONTENT_URI, null, "name=?", new String[]{SQLite.escapeString(value)}, null);
value = SQLite.unescapeString(cursor.getString(cursor.getColumnIndex("name"));

这是一厢情愿的想法还是已经解决了这个问题?

更新

上面的代码有效但在你不能使用的情况下?运算符你还需要一些方法来转义所有的字符。例如:

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" 
+ KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ KEY_CATEGORY + " TEXT DEFAULT Misc.);");

此示例中的.将抛出异常以及其他几个字符。是否有一种通用的方法/方法来逃避所有这些角色?

1 个答案:

答案 0 :(得分:3)

在SQL中,字符串以'单引号'分隔。要在字符串中使用一个,你必须加倍。

在SQL中没有其他需要转义的字符。 (如果您使用其他语言(如Java)嵌入字符串,则还必须使用该语言的转义机制。)

为避免字符串格式化问题,您应该使用参数:

String name = "me";
db.rawQuery("SELECT ... WHERE name = ?", new String[]{ name });