2013-02-25 93 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); 

爲我工作