2011-07-19 131 views
0

這是錯誤我得到:運行Sqlite查詢時出現異常!

**ERROR/Database(13775): Failure 1 (near "s": syntax error)** 

而我嘗試執行以下查詢:通過解析XML狀物體具有RSS提要

myDB.execSQL("INSERT INTO " + tableName + " (" + column[1] + "," + column[2] + "," + column[3] + "," + column[4] + "," 
           + column[5] + "," + column[6] + "," + column[7] + "," + column[8] + ",type) VALUES('" + url + "','" + title + "','" + summary + "','" + imageUrl + "','" + completeStoryUrl + "','" + date + "','" + imageString + "','" + body + "','" + type + "')"); 

這些值存儲在數據庫中。幾件物品被存儲,但在一些我得到這個例外。有沒有問題的查詢數據被髮送到該查詢..?任何幫助表示讚賞。

+1

http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain – Nick

+0

您可能需要逃避INSERT值 - [這個線程可能會幫助] [1] [1]:http://stackoverflow.com/questions/5432063/how-to-escape-unsupported-character-in-sqlite-on-android – Michalis

+2

爲什麼不把字符串放在第一位並打印出來。 – ColWhi

回答

0

沒有看到正在執行實際的查詢,我猜想,正在插入的領域之一包含了「字,這是打破了SQL語句。

例如想象一下,如果彙總的值

This string need"s to be escaped 

正如米哈利斯說,你需要逃脫被插入​​的值(更換任何特殊字符)

如果我是你,我會記錄正在執行的實際查詢字符串,然後採取看看logcat a你應該明白爲什麼它會失敗。

1

你應該從來沒有創建一個帶有字符串操作的SQL命令,因爲存在SQL注入的危險。有一些方法可以用參數安全地格式化命令。

在Java中有例如java.sql.PreparedStatement類。

使用這樣的傳統方法也應該修復你的語法錯誤。

+2

它在android上。 Java.sql.preparedstatement不適用。此外,這應該在評論部分..這不是一個答案。 – chedine

+0

因爲我的代表,我無法評論。在android上也有一些準備好的語句的方法(請參閱http://stackoverflow.com/questions/433392/how-do-i-use-prepared-statements-in-sqlite-in-android)。這只是一個例子。這是一個非常重要的筆記,不應該被拒絕! – schlamar

+0

我的不好。我沒有注意到你的代表。否則我不會低調。 – chedine