通过编程创建 SQLite 表

3

我正在创建一个Xamarin Forms应用程序。该应用程序包含一个按钮,用于创建新列表。列表的名称和日期保存在一个表中,但列表的内容必须存储在另一个表中,需要使用查询来创建该表。我已成功地使用以下方法将记录插入到保存列表名称和日期的表中:

[Table("ToDoLists")]
public class ShoppingList : INotifyPropertyChanged
{
    private int _id;

    [PrimaryKey, AutoIncrement]
    public int Id
    {
        get
        {
            return _id;
        }

        set
        {
            _id = value;
            OnPropertyChanged(nameof(Id));
        }
    }

    private string _name;

    [NotNull]
    public string Name
    {
        get
        {
            return _name;
        }

        set
        {
            _name = value;
            OnPropertyChanged(nameof(Name));
        }
    }

    private string _date;

    [NotNull]
    public string Date
    {
        get
        {
            return _date;
        }

        set
        {
            _date = value;
            OnPropertyChanged(nameof(Date));
        }
    }

    private string _description;

    [NotNull]
    public string Description
    {
        get
        {
            return _description;
        }

        set
        {
            _description = value;
            OnPropertyChanged(nameof(Description));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

我尝试过以下方法:
  • [Table(tableName)]语句中将列表名称作为表名传递,但是IDE告诉我只允许使用常量字段,这意味着我无法动态指定表名
  • 我尝试阅读有关SQLiteCommand的内容,但是给我的示例使用了SQLite PCL中不可用的函数(除非我未正确安装SQLite PCL)。

我如何使用SQLite PCL中的查询创建表?是否可能?有什么建议吗?

1个回答

3
看一下 SQLite-net

SQLite-net 是一个开源的库,可让 .NET 和 Mono 应用程序在 SQLite 3 数据库中存储数据。它最初是为 Xamarin.iOS 设计的,但现在已经发展到适用于所有平台(Xamarin.*、.NET、UWP、Azure 等)。

SQLite-net 被设计为一个快速和方便的数据库层。其设计遵循以下目标:

  • 非常容易与现有项目集成,并在所有 .NET 平台上运行。
  • 对 SQLite 的薄包装器快速高效。(此库不应成为查询性能瓶颈。)
  • 非常简单的方法来安全地执行 CRUD 操作和查询(使用参数),并以强类型方式检索这些查询的结果。
  • 与您的数据模型一起工作,而不会强制您更改类。(包含一个小的反射驱动 ORM 层。)

首先,创建一个 SQLiteAsyncConnection 到您的数据库:

private SQLiteAsyncConnection database; 
database = new SQLiteAsyncConnection("YourDatabasePath");

然后,您可以使用CreateTableAsync()方法来创建您的表格:
await database.CreateTableAsync<ShoppingList>();

如果您想向表中添加数据,可以按照以下步骤进行:

public async Task SaveShoppingObjects(List<ShoppingObjects> shoppingsObjects)
{
    await database.RunInTransactionAsync(tran =>
    {
        foreach (ShoppingObject s in shoppingObjects)
        {
            tran.InsertOrReplace(SqliteEntityFactory.Create(s));
        }
    });
}

SqliteEntityFactory.Create 是一个帮助你创建表元素的方法。它可能看起来像这样:

public static ShoppingList Create(ShoppingObject s)
{
    ShoppingList slist = new ShoppingList();
    if (s == null)
    {
        return slist;
    }
    slist.Id = s.Id;
    slist.Name = s.Name;
    // etc...

    return slist;
}

如果我理解你的问题正确,那应该就可以了!

谢谢!我会更仔细地研究SQLite Net! - Razor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接