Xamarin SQLite (C#)

public class Book
{
    [PrimaryKey, AutoIncrement]
    public long ID { get; set; }
    public string Text { get; set; }
    public string Date { get; set; }
}
 
  • データベース用のクラスを作成する(例:class TestDatabase)
public class TestDatabase
{
    readonly SQLiteAsyncConnection _database;
 
    public TestDatabase(string dbPath)
    {
        _database = new SQLiteAsyncConnection(dbPath);
        _database.CreateTableAsync<Book>().Wait();
    }
 
    public Task<List<Book>> GetBooksAsync()
    {
        var list = _database.Table<Book>().ToListAsync();
        return _database.Table<Book>().ToListAsync();
    }
 
    public async Task copyDabtabase()
    {
        string databaseFileName = "Test.db";
        // ローカルフォルダ
        IFolder folder = FileSystem.Current.LocalStorage;
        // 空ファイルの作成
        var newFile = await folder.CreateFileAsync(databaseFileName, CreationCollisionOption.ReplaceExisting);
 
        // 作成したファイルにデータをコピーする
        var assembly = typeof(App).GetTypeInfo().Assembly;
        using (var stream = assembly.GetManifestResourceStream("XamarinTest03." + databaseFileName))
        {
            using (var outputStream = await newFile.OpenAsync(PCLStorage.FileAccess.ReadAndWrite))
            {
                stream.CopyTo(outputStream);
                outputStream.Flush();
            }
        }
 
    }
}
 
  • Appクラス
public partial class App : Application
{
    static TestDatabase database;

    public static TestDatabase Database
    {
        get
        {
            if (database == null)
            {
                database = new TestDatabase(Path.Combine(FileSystem.Current.LocalStorage.Path, "Test.db"));
            }
            return database;
        }
    }

    // ......................
}
 
  • MainPageでの利用
public partial class MainPage : ContentPage
{
    private List<Book> list;

    public MainPage()
    {
        InitializeComponent();
    }

    // 画面表示時の処理
    protected override async void OnAppearing()
    {
        base.OnAppearing();

        // await App.Database.copyDabtabase();
        list = await App.Database.GetBooksAsync();
    } 
}
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください