2013-02-25 97 views
2

我必须在数据库中插入某些可能包含带单引号和双引号的字符的文本。在SQLite数据库插入时转义单引号字符时遇到困难

对于如:“LUMIX”或类似维杰的

我已经成功地躲过了双引号是这样的:

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


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



} 

但我不理解如何逃脱的单引号。在不转义单引号的情况下,SQLite不接受数据。如何解决这个问题?提前致谢!

+1

不数据库API给你绑定变量或特定的SQLite,避开功能? – Quentin 2013-02-25 10:54:40

+0

这是写在JavaScript,钛加速器,而不是Java原生 – kittu88 2013-02-25 10:57:55

+0

@ kittu88:那么? Titanium Appcelerator包含一个数据库API,_does_支持绑定变量(又名参数)。 – Martijn 2013-02-25 18:19:48

回答

4

使用的参数,那么你不需要逃避什么:

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

+1:它也[更安全和更快](http://stackoverflow.com/a/60496/60590)。 – Martijn 2013-02-25 12:05:15

+0

更新查询呢?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 +“'”); – kittu88 2013-02-25 12:09:02

+2

原理相同:'db.execute(“UPDATE formData SET form_xml_id = ?,dateTime_stamp =?,data =?,user_id = ?, status = ?,其中unique_id =?“,findex,datetime,'',Ti.App.information.user_id,DataStatus,Ti.App.mydata._guid );':-) – Martijn 2013-02-25 12:14:56

0

使用replaceAll方法与space如下替换'(single quote)

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

不工作在javascript – kittu88 2013-02-25 11:04:06

+0

尝试fdata.replace(/ [“']/g,”“) – 2013-02-25 11:06:32

+0

试了一下,但它没有工作! – kittu88 2013-02-25 11:11:33

1

CL的答案是由最好的解决方案,但如果您想在不重写代码的情况下完成这项工作,您可以添加此功能:

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

用法:

fdata = removeQuotes(fdata); 

为我工作