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

标签 sqlite xamarin xamarin.forms

我是 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 的主键

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/

相关文章:

authentication - 尝试重用身份验证 token 将 xamarin 应用程序连接到 azure 失败

android - 是否可以从 ContentProvider bulkInsert 获取最后的 "N"ID?

ios - 如何实时重新加载 UITableView

android - 如何强制在 Xamarin Android 项目中发现 anim 文件夹?

c# - 如何在 xamarin 表单中显示 html 格式的文本

xamarin.forms - 如何从 MessagingCenter 调用返回值?

iphone - sqlite退后一步

python - 如何将sqlite3数据转换为Json格式和CSV格式

android - 只需在 Android ListView 中填充数据库表名

ios - Xamarin 表格 : Navigation popping without animation on iOS