在android中使用sqlite插入字符串,其中包含单引号和双引号

时间:2013-12-16 10:29:08

标签: android sqlite

我在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"

5 个答案:

答案 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)

多个选项:

  1. ContentValuesSQLiteDatabase.insert()

  2. 一起使用
  3. 使用变量绑定,例如

    db.execSQL("INSERT INTO table(_id, text) VALUES(?,?)", new String[] { idValue, textValue });
    
  4. 转义字符串中的'。转义它的SQL方法是'',您可以使用DatabaseUtils帮助程序进行转义。

  5. 要转义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)

您可以使用"跳过字符串中的"