- Bookテーブルを持つTest.DBをプロジェクトに配置する(SQLiteファイルをプロジェクトに配置する)
- NuGetで「sqlite-net-pcl」をプロジェクトに追加する
- データベーステーブルのクラスを作成する(例:class Book)
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();
}
}
}
}
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;
}
}
// ......................
}
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();
}
}