gpt4 book ai didi

sqlite - Xamarin.Forms SQLite,在创建表时初始化数据

转载 作者:行者123 更新时间:2023-12-03 19:16:09 26 4
gpt4 key购买 nike

我是 xamarin 的新手,我正在尝试制作包含 sqlite 数据库的 xamarin.form 应用程序。所以我知道该表是创建一次的,但我也有一些默认情况下需要在该表中的记录。我的意思是当创建表时,数据也必须用它初始化一次。根据教程,我有一个类来处理名为 DataAccess.cs 的数据库。

class DataAccess : IDisposable
{
public void Dispose()
{
database.Dispose();
}

private SQLiteConnection database;
public ObservableCollection<DataModel> dataz { get; set; }
private static object collisionLock = new object();

public DataAccess()
{
database = DependencyService.Get<IConfig>().DbConnection();
database.CreateTable<DataModel>();

//database.Insert(new DataModel { Did = 1 , Data = "aaaa"});
//database.Insert(new DataModel { Did = 2, Data = "bbb" });
//database.Insert(new DataModel { Did = 3, Data = "ccc" });

this.dataz = new ObservableCollection<DataModel>(database.Table<DataModel>());



if (!database.Table<DataModel>().Any())
{
addNewData();
}

}

public void addNewData()
{
this.dataz.Add(new DataModel { Did = 1, Data = "aa" });
}

public void SaveData(DataModel record)
{
lock (collisionLock)
{
database.Insert(record);
}
}

public DataModel GetDataById(int id)
{
lock (collisionLock)
{
return database.Table<DataModel>().
FirstOrDefault(x => x.Did == id);
}
}

public List<DataModel> GeyAllData()
{
return database.Table<DataModel>().ToList();
}



}

由于该表是在上面的类(class)讲师中创建的。所以我尝试在那里初始化数据,但每次运行时都会将数据添加到表中。所以我很困惑如何只在第一次运行时初始化数据。

最佳答案

你可以选择两种方式之一。

1:检查表是否尚不存在,如果不存在,则创建并添加数据

var result = await conn.ExecuteScalarAsync<int>("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='DataModel';", new string[] { });
if (result == 0)
{
await conn.CreateTableAsync<DataModel>();

// Insert your initial data
}

2:始终检查数据是否存在,如果不存在则插入

仅供引用:假设 Did是您的 DataModel 的 PrimaryKey
var row = await conn.FindAsync<Record>(1);
if (row == null)
{
// Insert the "Did = 1" row
}

关于sqlite - Xamarin.Forms SQLite,在创建表时初始化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52692200/

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