我在Android应用程序中使用sqlite插入字符串时遇到问题 我试过了,
query = "INSERT OR REPLACE into table(_id, text) VALUES ("+data.get(i).id+", '"+data.get(i).text+"')";
MyClass.db.execSQL(query);
如果我的字符串看起来像,
'I'm an android developer'
App崩溃,这里是logcat结果,
Caused by: android.database.sqlite.SQLiteException: near "m": syntax error: , while compiling: INSERT OR REPLACE into table (_id, text) VALUES (4, '"I'm an android developer"' )
我认为它假定,我的查询在此结束
'"I'
请帮我插入任何字符串的情况,或者它包含单引号或双引号,如
"I'm an "android" developer"
答案 0 :(得分:5)
没有任何硬编码或任何东西,您可以使用ContentValues
直接插入,如下所示..
ContentValues values = new ContentValues();
long retvalue = 0;
values.put("_id", id_here);
values.put("text", your_text_here);
retvalue = MyClass.db.insertWithOnConflict(table, null, values, CONFLICT_REPLACE);
答案 1 :(得分:3)
如果你使用普通的insert statement
并且如果你有任何包含单引号的值,那么你可能会面临一个像这样的奇怪问题。所以,试试吧..
String insert_info = "INSERT OR REPLACE INTO table(_id,text) VALUES (?,?)";
SQLiteStatement stmt = db.compileStatement(insert_info);
stmt.bindString(1, ""+data.get(i).id);
stmt.bindString(2, ""+data.get(i).text);
stmt.execute();
答案 2 :(得分:1)
多个选项:
将ContentValues
与SQLiteDatabase.insert()
使用变量绑定,例如
db.execSQL("INSERT INTO table(_id, text) VALUES(?,?)", new String[] { idValue, textValue });
转义字符串中的'
。转义它的SQL方法是''
,您可以使用DatabaseUtils
帮助程序进行转义。
要转义Java字符串中的"
,请使用\"
。
答案 3 :(得分:0)
您必须在查询字符串中将\'替换为\'\':
String getQuery(){
query = "INSERT OR REPLACE into table(_id, text) VALUES ("+data.get(i).id+", '"+getSqlValue(data.get(i).text)+"')";
MyClass.db.execSQL(query);
return query;
}
String getSqlValue(String input){
return input.replace("\'","\'\'");
}
答案 4 :(得分:-3)
您可以使用"
跳过字符串中的"