【问题标题】:xamarin.forms: retrieving existing data from .db filexamarin.forms:从 .db 文件中检索现有数据
【发布时间】: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


【解决方案1】:

对其他人有用的资源:

Hameed Kunkanoor 的实现:“创建一个 sqlite 数据库并将您的数据以 Xamarin 形式存储在您的 android 和 ios 应用程序中”https://medium.com/@hameedkunkanoor/creating-a-sqlite-databse-and-storing-your-data-in-your-android-and-ios-application-in-xamarin-2ebaa79cdff0 (如果需要,请参考他的 git)

Matthewrdev 的解释/回复:Use a local database in Xamarin

为了改进实施 -- Brandon Minnick:“Xamarin:高效使用 SQLite 数据库”https://codetraveler.io/2019/11/26/efficiently-initializing-sqlite-database/

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多