当我尝试在我的插入查询中包含unrecognized token error
列及其值时,我得到Api_key
,否则,它会正常工作。
这是代码:
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)
答案 0 :(得分:10)
你应该在非数字字符串周围加上刻度线。
String s="INSERT OR IGNORE INTO Results(AuditID,CriteriaID,ChapterID,Api_key) VALUES("+auditid+","+crit_id+","+current_chap+",`"+apikey+"`)";
注意“标记”apikey“
SQLite看到了-
,并对它为什么不在字符串中感到困惑。
答案 1 :(得分:8)
不要在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);
}
答案 2 :(得分:4)
Apikey是一个字符串,所以对于sql,你需要将它放在引号内。
String s="INSERT OR IGNORE INTO Results(AuditID,CriteriaID,ChapterID,Api_key) VALUES("+auditid+","+crit_id+","+current_chap+",'"+apikey+"')";