sqlite‑net库

一、安装 sqlite‑net 库

三种安装方式:

  1. NuGet图形界面:搜索包名 sqlite‑net 安装
  2. 直接引入源码文件
    下载:https://raw.githubusercontent.com/praeclarum/sqlite-net/master/src/SQLite.cs
    新建SQLite.cs放到项目里,命名空间:using SQLite
  1. 包管理器控制台命令
Install-Package sqlite-net-pcl -Version 1.4.118Code language: CSS (css)

二、定义实体类 Person

using SQLite;

public class Person
{
    [PrimaryKey, AutoIncrement] //主键、自增
    public int Id { get; set; }
    public string Name { get; set; }
}Code language: JavaScript (javascript)

三、创建数据库、打开连接、建表

// 获取手机本地存储文件夹
string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
//拼接数据库完整路径
var db = new SQLiteConnection(System.IO.Path.Combine(folder, "myDb.db"));

// 如果表不存在,就创建Person表;已存在不会重复创建
db.CreateTable<Person>();Code language: JavaScript (javascript)
按钮点击完整示例
private void Btn_Click3(object sender, EventArgs e)
{
    string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    var db = new SQLiteConnection(System.IO.Path.Combine(folder, "myDb.db"));
    db.CreateTable<Person>();
}Code language: JavaScript (javascript)

四、新增数据 Insert()

string dbPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),"ormdemo.db3");
var db = new SQLiteConnection(dbPath);

Person p = new Person { Name = "黄飞鸿" };
int newId = db.Insert(p); 
//返回值:成功返回新记录自增IdCode language: JavaScript (javascript)

五、查询单条数据 Get()

// 根据条件查询一条
var per = db.Get<Person>(m => m.Id == 1);Code language: JavaScript (javascript)

六、删除数据 Delete()

//传入主键Id,删除这条记录
var count = db.Delete<Person>(1); 
//返回受影响行数,删除成功返回1Code language: JavaScript (javascript)
实体特性(标记在模型类的类/属性上方)
特性作用说明
[PrimaryKey]设置整数属性为主键,不支持复合主键
[AutoIncrement]整数主键,新增数据时自动自增
[Column(name)]修改数据库里的列名,默认和C#属性名一致
[Table(name)]修改数据库表名,默认和C#类名一致
[MaxLength(value)]限制文本最大长度;数据库不会强制拦截,代码层要自己校验
[Ignore]忽略该属性,不会创建数据库字段(比如集合、内存临时属性)
[Unique]该列的值必须唯一,不能重复

例子

[Table("Person")]
public class Person
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    [Column("UserName"), MaxLength(20), Unique]
    public string Name { get; set; }

    [Ignore]
    public string TempData { get; set; } // 不会存入数据库
}Code language: JavaScript (javascript)

LINQ 方式查询数据库

使用LINQ语法,不需要手写SQL语句

// from ... where ... select 查询
var personsNamedMathieu = from p in db.Table<Person>()
                          where p.Name == "Mathieu"
                          select p;

// FirstOrDefault() 获取第一条,没有则返回null
Console.WriteLine(">", personsNamedMathieu.FirstOrDefault().Name);Code language: JavaScript (javascript)

直接执行原生SQL

db.Query<T>(),使用?做占位符,防止SQL注入

var personsNamedMathieu = db.Query<Person>(
    "SELECT * FROM Person WHERE Name = ?", 
    "Mathieu");

foreach (var p in personsNamedMathieu)
{
    Console.WriteLine("p: " + p.Name);
}Code language: PHP (php)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注