gpt4 book ai didi

android - 防止 SQLite 数据库中的数据重复

转载 作者:行者123 更新时间:2023-11-29 21:07:15 24 4
gpt4 key购买 nike

我正在开发一个使用 SQLite 作为本地数据库的 Android 应用程序。该应用程序同步从 Web api 获取的数据并将其存储在本地数据库中。所有模型类都将其 ID 属性设置为主键并自动递增,因此我可以手动输入数据而无需指定 ID。问题是当我将 API 中的数据插入 SQlite 时,对象的 ID 被忽略,并且 Sqlite 为对象提供了一个新的 ID。我希望存储的数据与所存储的对象具有相同的 ID。

Web API 返回 ID 类型为 long 的对象列表,但 SQLite 对象的主键为 int。这就是 ID 值因数据类型不匹配而未存储的原因吗?我无法更改数据来源的 SQL 数据库中的数据类型,因为其中有数百个表。有办法解决吗?

这是在本地数据库中插入或更新数据的代码:

    }
public async Task<string> insertUpdateVideoData(Video_Struct data)
{
try
{
var db = new SQLiteAsyncConnection(dbPath);
var m = GetVideos();
if (await db.FindAsync<Video_Struct>(f => f.VideoID == data.VideoID) != null)
{

await db.UpdateAsync(data);
}
else
{
if (await db.InsertAsync(data) != 0)
{

await db.UpdateAsync(data);
}

}
return "Single data file inserted or updated";
}
catch (SQLiteException ex)
{
return ex.Message;
}
}

这是从 API 获取数据对象的代码:

    public async Task<List<Video_Struct>> GetVideoData()
{
List<Video_Struct> vids = new List<Video_Struct>();
WebClient mClient = new WebClient();
var output = await mClient.DownloadDataTaskAsync(new Uri(GlobalVariables.host + "/api/media/getmedia"));
var json = Encoding.UTF8.GetString(output);
vids = JsonConvert.DeserializeObject<List<Video_Struct>>(json);
return vids;
}

最佳答案

如果您的本地数据库是网络数据的缓存,并且外部数据库为您提供了唯一的 ID,请不要在方案中使用自动增量,只需重复使用外部 ID。

实际上,您可以拥有一个复杂的(复合)主键,这取决于数据的唯一属性。

如果您不将数据作为结构化集使用,您可以尝试 gson+SharedPreferences 。只是不要忘记覆盖数据模型的 equals 和 hashcode。

数据类型不是问题,因为 sqlite 使用 INTEGER type .

关于android - 防止 SQLite 数据库中的数据重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36699712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com