【问题标题】:Difficulty in escaping single quote character while SQLite database insertion插入 SQLite 数据库时难以转义单引号字符
【发布时间】:2013-02-10 11:55:36
【问题描述】:

我必须在数据库中插入某些文本,其中可能包含带单引号和双引号的字符。

例如:“Lumix” 或类似 Vijay 的

我已经成功转义了这样的双引号:

if(fdata.search('"') != -1) {


fdata = fdata.replace(/(['"])/g, "\\$1");



}  

但我不明白如何转义单引号。不转义单引号 SQLite 不接受数据。如何解决问题?提前致谢!

【问题讨论】:

  • 你的数据库 API 没有给你绑定变量或 SQLite 特定的转义函数吗?
  • 它是用javascript写的,钛appcelerator,不是java native
  • @kittu88:所以? Titanium Appcelerator 包含一个数据库 API,它确实支持绑定变量(也称为参数)。

标签: javascript android sqlite titanium


【解决方案1】:

使用参数,则无需转义:

db.execute('INSERT INTO MyTable(ID, Name) VALUES(?, ?)', 123, name);

【讨论】:

  • 更新查询呢? db.execute("UPDATE formData SET form_xml_id=" + findex + ",dateTime_stamp='" + datetime + "',data='" + "" + "',user_id=" + Ti.App.information.user_id + " ,status='"+ DataStatus +"' where unique_id='" + Ti.App.mydata._guid + "'");
  • 同理:db.execute("UPDATE formData SET form_xml_id=?, dateTime_stamp=?, data=?, user_id=?, status=?, where unique_id=?", findex, datetime, '', Ti.App.information.user_id, DataStatus, Ti.App.mydata._guid); :-)
【解决方案2】:

CL. 的答案是迄今为止最好的解决方案,但如果你想在不重写代码的情况下完成这项工作,你可以添加这个函数:

function removeQuotes(str){
return str.replace(/'/g, "'").replace(/"/g,""");
}

用法:

fdata = removeQuotes(fdata);

这对我有用

【讨论】:

    【解决方案3】:

    使用replaceAll方法将'(single quote)替换为space如下:

         String name= name.replaceAll("'", "''");
    

    【讨论】:

    • 试试 fdata.replace(/["']/g, "")
    • @Aʌɐpɥɐuı:这只会删除所有(单引号和双引号)字符,而不是分隔它们...
    • sqlquery.replace(/'/g, "''");
    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2012-12-11
    相关资源
    最近更新 更多