
NuGet包:sqlite-net-pcl(作者 Frank A. Krueger,不要选错包) 项目名:
LocalDatabaseTutorial
1. 新建项目
Visual Studio → 创建 Xamarin.Forms 空白应用
2. 安装 NuGet
NuGet管理器 → 浏览,搜索 sqlite-net-pcl,安装到共享项目 + Android + iOS平台项目。
3. 实体类 Person.cs
using SQLite;
namespace LocalDatabaseTutorial
{
public class Person
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
}
Code language: JavaScript (javascript)
[PrimaryKey]:主键[AutoIncrement]:自增
4. 数据库访问类 Database.cs
using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite;
namespace LocalDatabaseTutorial
{
public class Database
{
readonly SQLiteAsyncConnection _database;
public Database(string dbPath)
{
_database = new SQLiteAsyncConnection(dbPath);
// 创建表,不存在则新建,存在不会重复报错
_database.CreateTableAsync<Person>().Wait();
}
// 查询全部人员
public Task<List<Person>> GetPeopleAsync()
{
return _database.Table<Person>().ToListAsync();
}
// 新增一条记录
public Task<int> SavePersonAsync(Person person)
{
return _database.InsertAsync(person);
}
}
}
Code language: PHP (php)
SQLiteAsyncConnection = 异步版本,推荐用,避免UI卡顿
5. App.xaml.cs (全局数据库单例)
using System;
using System.IO;
using Xamarin.Forms;
namespace LocalDatabaseTutorial
{
public partial class App : Application
{
static Database database;
public static Database Database
{
get
{
if (database == null)
{
// 数据库文件放在系统本地应用目录 people.db3
database = new Database(Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"people.db3"));
}
return database;
}
}
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override void OnStart() { }
protected override void OnSleep() { }
protected override void OnResume() { }
}
}
Code language: PHP (php)
单例模式:整个App共用同一个数据库实例,数据库文件自动存在应用私有目录。
6. MainPage.xaml UI
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="LocalDatabaseTutorial.MainPage">
<StackLayout Margin="20,35,20,20">
<Entry x:Name="nameEntry"
Placeholder="Enter name" />
<Entry x:Name="ageEntry"
Placeholder="Enter age" />
<Button Text="Add to Database"
Clicked="OnButtonClicked" />
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}"
Detail="{Binding Age}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
Code language: HTML, XML (xml)
7. MainPage.xaml.cs 后台逻辑
using System;
using Xamarin.Forms;
namespace LocalDatabaseTutorial
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
// 页面每次出现时加载数据库数据
protected override async void OnAppearing()
{
base.OnAppearing();
listView.ItemsSource = await App.Database.GetPeopleAsync();
}
async void OnButtonClicked(object sender, EventArgs e)
{
// 简单校验:姓名、年龄不为空
if (!string.IsNullOrWhiteSpace(nameEntry.Text) && !string.IsNullOrWhiteSpace(ageEntry.Text))
{
await App.Database.SavePersonAsync(new Person
{
Name = nameEntry.Text,
Age = int.Parse(ageEntry.Text)
});
// 清空输入框
nameEntry.Text = ageEntry.Text = string.Empty;
// 重新读取数据库刷新列表
listView.ItemsSource = await App.Database.GetPeopleAsync();
}
}
}
}
Code language: PHP (php)
运行逻辑
- 打开页面触发
OnAppearing→ 读取数据库,绑定到ListView - 输入姓名、年龄,点按钮 → 插入新Person记录
- 插入完成后,重新查询数据库刷新ListView
增加删除、更新方法
// 更新
public Task<int> UpdatePersonAsync(Person person)
{
return _database.UpdateAsync(person);
}
// 删除
public Task<int> DeletePersonAsync(Person person)
{
return _database.DeleteAsync(person);
}
Code language: PHP (php)

Previous: Xamarin.Forms 应用生命周期(App.xaml.cs)
Next: Xamarin.Forms Web服务