2013-10-11 79 views
1

當我嘗試在我的插入查詢中包含Api_key列及其值時,我得到unrecognized token error,否則無法正常工作。插入的SQLite無法識別的令牌異常

下面的代碼:

public void InsertResult(String apikey,String auditid,String crit_id, int current_chap) 
{ 
    String s="INSERT OR IGNORE INTO Results(AuditID,CriteriaID,ChapterID,Api_key) VALUES("+auditid+","+crit_id+","+current_chap+","+apikey+")"; 

    sp.execSQL(s); 
} 

這裏是我的logcat:

10-11 22:45:09.655: E/AndroidRuntime(8124): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.oxtro.trustea/com.oxtro.trustea.ChapterActivity}: android.database.sqlite.SQLiteException: unrecognized token: "3249f6dc" (code 1): , while compiling: INSERT OR IGNORE INTO Results(AuditID,CriteriaID,ChapterID,Api_key) VALUES(1,13,13,3249f6dc-c3ca-4c8d-a4de-df1834c579c4) 

回答

8

你應該把你的左右非數字字符串刻度線。

String s="INSERT OR IGNORE INTO Results(AuditID,CriteriaID,ChapterID,Api_key) VALUES("+auditid+","+crit_id+","+current_chap+",`"+apikey+"`)"; 

注意圍繞「apikey」的`標記

SQLite的是看到了-和感到困惑,爲什麼它在一個字符串沒有。

+1

是的,這似乎是問題 – user2871937

+1

爲正確因此問題進入一個解決的狀態,您應該紀念的答案。 – bclymer

+1

永遠不要在SQL語句中硬編碼字符串! –

3

Apikey是一個字符串,因此您需要將它放在引號內。 String s="INSERT OR IGNORE INTO Results(AuditID,CriteriaID,ChapterID,Api_key) VALUES("+auditid+","+crit_id+","+current_chap+",'"+apikey+"')";

+0

似乎解決它 – user2871937

+0

永遠不要在SQL語句中硬編碼字符串! –

5

永遠不要在您的SQL語句中硬編碼字符串。

用戶輸入的字符串會產生SQL注入漏洞。

任意字符串需要被解析爲特殊字符。

SQL API通常提供綁定方法,允許您安全地在數據庫中插入任意數據。

在Android中的SQLite,爲INSERT你可以使用:

public void InsertResult(String apikey,String auditid,String crit_id, int current_chap) 
{ 
    ContentValues cv=new ContentValues(); 
    cv.put("AuditID", auditid); 
    cv.put("CriteriaID", crit_id); 
    cv.put("ChapterID", current_chap); 
    cv.put("Api_key", apikey); 
    sp.insert("Results", null, cv); 
} 
相關問題