xamarin SQLite

连接到 SQLite 数据库
SQLite.Net 通过“SQLiteConnection”对象建立与 SQLite 数据库的连接。 实例化此对象时,必须传入数据库文件的文件名。 然后,它将打开文件(如果存在文件)或创建文件(如果不存在文件)。
下面是其用法示例:

string filename = ...
SQLiteConnection conn = new SQLiteConnection(filename);

创建表
回想一下,SQLite.NET 是对象关系映射器,这意味着可以通过 C# 类生成数据库架构。 返回 User 类的上一个示例。
SQLite.NET 可通过此 C# 类生成数据库架构,但许多属性可供添加到类中,用于对架构进行修改。

以下是可用属性的一些示例:

Table:如果希望表名不是类名,请指定表的名称。
primaryKey:指定要为主键的列。
AutoIncrement:指定在插入新行时,列值应自动增加。
Column:如果不想使用属性名作为列名,请指定列的名称。
MaxLength:指定列中可使用的最大字符数。
Unique:指定列中的值必须与其他所有行不同。
回到“User”类,下面是使用所有这些属性的版本:

[Table("user")]
public class User
{
    // PrimaryKey is typically numeric 
    [PrimaryKey, AutoIncrement, Column("_id")]
    public int Id { get; set; }

    [MaxLength(250), Unique]
    public string Username { get; set; }
    ...
}

异步查询
若要生成响应速度极快的移动应用程序,需要以略有不同的方式执行操作。 如果在 UI 线程上运行数据库操作,则可能会导致 UI 在操作需要很长时间才能完成时冻结。
为了解决此问题,SQLite.NET 通过“SQLiteAsyncConnection”类包含了一个异步 API。 例如,若要异步创建表,可使用“CreateTableAsync”方法:

var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();

使用 SQLite.NET 执行异步操作
“SQLiteAsyncConnection”公开与同步对应类相同的操作。 但是,操作均基于任务,以便在后台使用。

下面列出了一些常见的异步操作:

CreateTableAsync:根据指示的类创建表
DropTableAsync:删除与指示的类关联的表
GetAsync:获取表中与指示的类关联的记录,并匹配传入构造函数的主键
InsertAsync:使用传入构造函数的项插入新记录
UpdateAsync:使用传入构造函数的项更新现有记录
DeleteAsync:删除表中映射到指示类的记录,并匹配传入构造函数的主键
QueryAsync:运行直接 SQL 查询并返回对象
ExecuteAsync:运行直接 SQL 查询并返回受影响的行数。
ExecuteScalarAsync:运行直接 SQL 查询并返回单个结果
ToListAsync:异步执行“Table”方法
以下是使用“ToListAsync”方法异步检索记录的示例:

SQLiteAsyncConnection conn;
ObservableCollection<User> userList;  // Bound to UI
...
public async Task AddAllUsersAsync()
{
    List<User> users = await conn.Table<User>().ToListAsync();
    // Must be on UI thread here!
    foreach (var u in users)
        userList.Add(u);
}

使用 LINQ 执行 SQLite 查询
虽然可使用“Table”方法在表中检索所有行,但并不总是想要这样做。 有时,想要仅返回行的子集或运行更复杂的查询。 对于这些任务,请将 LINQ 与 SQLite.NET 配合使用。

SQLite.NET 支持许多常见的 LINQ 查询,其中包括:

Where
Take
Skip
OrderBy
OrderByDescending
ThenBy
ElementAt
First
FirstOrDefault
ThenByDescending
Count
通过这些方法,你可以使用扩展方法语法或 LINQ C# 语法。 例如,下面是可供使用 LINQ C# 语法按用户名获取用户的代码片段:

public User GetByUsername(string username)
{
    var user = from u in conn.Table<Person>()
               where u.Username == username
               select u;
    return user.FirstOrDefault();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值