【发布时间】:2019-12-24 16:32:35
【问题描述】:
在 Xamarin Forms 4.3 中,我正在关注这个“本地数据库”文档:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/data/databases
本文档解释了如何创建和使用新的 sqlite 数据库,但是我如何在现有的 .db 文件中加载和显示数据,最终目的是将其传输到新的本地 sqlite 数据库?
using SQLite;
namespace TruckExample.Models
{
public class Truck
{
[PrimaryKey, AutoIncrement]
public int TruckNo { get; set; }
public string TruckName { get; set; }
}
}
//////////////////////////////////////////////
using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite;
using TruckExample.Models;
namespace TruckExample.Data
{
public class TruckDatabase
{
readonly SQLiteAsyncConnection _database;
public TruckDatabase(string dbPath)
{
_database = new SQLiteAsyncConnection(dbPath);
_database.CreateTableAsync<Truck>().Wait();
}
public Task<List<Truck>> GetTrucksAsync()
{
return _database.Table<Truck>().ToListAsync();
}
}
}
////////////////////////////////////////////////
using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using TruckExample.Data;
using System.IO;
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace TruckExample
{
public partial class App : Application
{
static TruckDatabase database;
public static TruckDatabase Database
{
get
{
if(database == null)
{
database = new TruckDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Truck.db"));
}
return database;
}
}
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());
}
}
}
/////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace TruckExample
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : ContentPage
{
public MainPage ()
{
InitializeComponent ();
}
protected override async void OnAppearing()
{
base.OnAppearing();
listView.ItemsSource = await App.Database.GetTrucksAsync();
Debug.Write(App.Database.GetTrucksAsync());
}
}
}
【问题讨论】:
-
将其作为资产 (Android) 或内容 (iOS) 包含在您的平台项目中,然后在应用启动时将其复制到可写文件夹中
-
@Jason 谢谢,将 .db 文件放在 TruckExample.Android 资产文件夹中是有意义的。当您说“在应用程序启动时复制它”时,您的意思是在 App 类文件中使用 TruckExample 的 OnStart() 来获取 Android Asset 文件夹中的 .db 文件,然后您就可以写入/复制到文件/ sqlite 数据库?
-
是的,使用 OnStart 并从 Assets 复制到可写文件夹
-
你可以参考这个线程如果你想在两个db之间传输数据syncfusion.com/kb/9633/…,但是我建议你从on db读取数据,然后将数据存储到另一个db,我试图复制db文件,无法使用。
标签: database sqlite xamarin.forms