c# - sqlite3 异步插入和更新

标签 c# android android-asynctask sqlite

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

最佳答案

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

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

关于c# - sqlite3 异步插入和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27082473/

相关文章:

c# - 哈希表加倍?

java - 如何从应用程序打开外部存储中的文件? (安卓)

android opengl es 2.0 纹理切换

java - 如何使用 Holo.NoActionBar 主题隐藏 HTC one 上的操作栏

java - 为什么执行AsyncTask时不需要捕获TimeoutException?

android - Asynctask vs 线程 vs 服务 vs 加载器

c# - Xunit 的 App.config

c# - 在 C# 中,我可以根据使用的类型 (T) 使用泛型的特定实现吗

c# - Put call 在 PostMan 中有效,但在 RestSharp 中无效 : Getting a bad request

java - 如何从其他类(即 Activity 类)内的(AsyncTask)获取列表值?