我的数据库包含URL作为主键。 表模式是
-- Describe HISTORY
CREATE TABLE history ("name" TEXT NOT NULL, "location" TEXT NOT NULL PRIMARY KEY, "time_date" DATE)
和样本数据
| name | location | time_date |
| Google | http://www.google.co.tz/?gws_rd=cr | 2013-08-13 |
所以我这样做:
DELETE FROM history WHERE location="http://www.google.co.tz/?gws_rd=cr"
但删除不起作用!如果我按日期删除或删除一切它工作正常,所以似乎我需要某种转义URL。我使用wxSQLite3,函数低于
DeleteHistory(const wxString& location)
{
wxString sql = wxT("DELETE FROM history WHERE location=?;");
try
{
wxSQLite3Statement stmt = m_db->PrepareStatement(sql);
stmt.Bind(1, location);
stmt.ExecuteUpdate();
stmt.Reset();
stmt.Finalize();//done
}
catch (wxSQLite3Exception& e)
{
wxMessageBox(e.GetMessage());
return false;
}
return true;
}
可在此处找到数据库文件:https://www.dropbox.com/s/szori418cryvvuy/browser.config
我错过了什么?
答案 0 :(得分:0)
我认为您需要将location参数放在引号中,因为它包含(或可能包含)问号(解释为占位符)。
答案 1 :(得分:0)
我很愚蠢,因为我在数据库中插入数据时交换了参数,因此删除无法工作(因为where子句指向不在引用列中的错误数据)。简而言之,我在插入期间交换列值(即在名称中插入url,反之亦然)。
我纠正了代码及其工作,感谢Ulrich Telle指出我引用他
Stefano,我下载了数据库文件并看了一下。从我的角度来看 看,我认为你是在错误的列序列中保存数据。您 在“名称”列中找到“位置”值(即“http:// ...”) 反之亦然。因此,DELETE命令不会令人惊讶 工作。您可以将WHERE条件更改为“WHERE name =?”。然而, 检查您正在使用的代码肯定会更好 保存并从表中检索数据并更正序列 列值。