我在插入这个sqlite数据库时遇到了很多麻烦。第一个代码的第一个是我第一次插入的项目,第二个代码是我想要插入的项目。我第一次插入all很好,我可以很好地检索行,但是第二次我尝试将新项插入数据库时它没有更新,而是使用消息约束抛出sqliteexception。
第一次
GroceriesItemHistory.AddToGroceriesHistory ("Banana");
GroceriesItemHistory.AddToGroceriesHistory ("Apple");
GroceriesItemHistory.AddToGroceriesHistory ("Citrus");
第二次
GroceriesItemHistory.AddToGroceriesHistory ("Banana");
GroceriesItemHistory.AddToGroceriesHistory ("Apple");
GroceriesItemHistory.AddToGroceriesHistory ("Citrus");
GroceriesItemHistory.AddToGroceriesHistory ("Plant");
在这里,您可以看到调用数据库以保存项目的代码
saveHistory.Click += delegate
{
Task<string> result = localDB.SaveGroceriesItemHistory();
Toast.MakeText(this, result.Result, ToastLength.Short).Show();
};
以下是插入项目的实际代码
public async Task<string> SaveGroceriesItemHistory()
{
try
{
var dbConn = new SQLiteAsyncConnection(dbPath);
foreach (var historyItem in GroceriesItemHistory.GroceriesHistory)
{
HistoryItem item = new HistoryItem();
item.HistoryItemName = historyItem.Key;
item.NumberOfAddidtions = historyItem.Value;
if(await dbConn.InsertAsync(item) != 0)
await dbConn.UpdateAsync(item);
}
return "GroceriesItemHistory saved!";
}
catch (SQLiteException ex)
{
return ex.Message;
}
}
答案 0 :(得分:2)
好吧我修复了这个问题,首先查询数据库是否存在与我想要插入的对象的主键相同的行
if(await dbConn.FindAsync<HistoryItem>(x => x.HistoryItemName == item.HistoryItemName) != null)
await dbConn.UpdateAsync(item);
else
await dbConn.InsertAsync(item);