【问题标题】:Sqlite3 asynchronous insertion and updatesSqlite3 异步插入和更新
【发布时间】:2014-11-22 20:58:37
【问题描述】:

我在插入这个 sqlite 数据库时遇到了很多麻烦。第一段代码的第一段是我第一次插入的项目,第二段代码是我要插入的项目。我第一次插入一切都很好,我可以很好地检索行,但是第二次我尝试将新项目插入到数据库中它没有更新,而是抛出一个带有消息约束的 sqliteexception。

第一次

GroceriesItemHistory.AddToGroceriesHistory ("Banana");
GroceriesItemHistory.AddToGroceriesHistory ("Apple");
GroceriesItemHistory.AddToGroceriesHistory ("Citrus");

第二次

GroceriesItemHistory.AddToGroceriesHistory ("Banana");
GroceriesItemHistory.AddToGroceriesHistory ("Apple");
GroceriesItemHistory.AddToGroceriesHistory ("Citrus");
GroceriesItemHistory.AddToGroceriesHistory ("Plant");

这里是调用 db 来保存项目的代码

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;
    }
}

【问题讨论】:

    标签: c# android android-asynctask sqlite


    【解决方案1】:

    好吧,我通过首先查询数据库来解决问题,如果该行与我想要插入的对象的主键相同

    if(await dbConn.FindAsync<HistoryItem>(x => x.HistoryItemName == item.HistoryItemName) != null)
        await dbConn.UpdateAsync(item);
    else
        await dbConn.InsertAsync(item);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多