teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

解決方法の追記

2016/11/17 06:34

投稿

nuits.jp
nuits.jp

スコア346

answer CHANGED
@@ -10,4 +10,56 @@
10
10
  またまた手前みそですが、こちらに少しその辺のノウハウを記載しています。
11
11
  [http://www.nuits.jp/entry/2016/06/27/191636](http://www.nuits.jp/entry/2016/06/27/191636)
12
12
 
13
- ひとまずこれらの情報をベースに試してみることをお勧めします。
13
+ ひとまずこれらの情報をベースに試してみることをお勧めします。
14
+
15
+ 2016.11.17 追記
16
+ アプリにDBファイルを添付して配布したいとのことでしたので、その方法を追記したいと思います。
17
+ なお、動くソースコードをこちらに公開していますので、併せて確認してみてください。
18
+ [https://github.com/nuitsjp/XamarinSamples](https://github.com/nuitsjp/XamarinSamples)
19
+ ここのXFEmbeddSQLiteFile.slnを開いてください。
20
+
21
+ さて、手順的には次のように実装します。
22
+ 1. PCLのソリューションに別途作成したSQLiteデータベースファイルを配置しプロパティを「埋め込みリソース」に変更する
23
+ 2. プロジェクトに、sqlite-net-pclとPCLStorageを追加する
24
+ 3. コードを記述する
25
+
26
+ コードは以下の感じです。
27
+ ```cs
28
+ const string databaseFileName = "sqlite.db3";
29
+ // ルートフォルダを取得する
30
+ IFolder rootFolder = FileSystem.Current.LocalStorage;
31
+ // ファイルシステム上のDBファイルの存在チェックを行う
32
+ var result = await rootFolder.CheckExistsAsync(databaseFileName);
33
+ if (result == ExistenceCheckResult.NotFound)
34
+ {
35
+ // 存在しなかった場合、新たに空のDBファイルを作成する
36
+ var newFile = await rootFolder.CreateFileAsync(databaseFileName, CreationCollisionOption.ReplaceExisting);
37
+ // Assemblyに埋め込んだDBファイルをストリームで取得し、空ファイルにコピーする
38
+ var assembly = typeof(App).GetTypeInfo().Assembly;
39
+ using (var stream = assembly.GetManifestResourceStream("XFEmbeddSQLiteFile.sqlite.db3"))
40
+ {
41
+ using (var outputStream = await newFile.OpenAsync(FileAccess.ReadAndWrite))
42
+ {
43
+ stream.CopyTo(outputStream);
44
+ outputStream.Flush();
45
+ }
46
+ }
47
+ }
48
+
49
+ // ファイルからコネクションを作成しデータを取得する
50
+ var file = await rootFolder.CreateFileAsync(databaseFileName, CreationCollisionOption.OpenIfExists);
51
+ using (var connection = new SQLiteConnection(file.Path))
52
+ {
53
+ var builder = new StringBuilder();
54
+ foreach (var customer in connection.Table<Customer>())
55
+ {
56
+ builder.Append($"Id:{customer.Id} Name:{customer.Name}, ");
57
+ }
58
+ label.Text = builder.ToString();
59
+ }
60
+ ```
61
+
62
+ [https://github.com/nuitsjp/XamarinSamples/blob/master/XFEmbeddSQLiteFile/XFEmbeddSQLiteFile/App.cs#L39](https://github.com/nuitsjp/XamarinSamples/blob/master/XFEmbeddSQLiteFile/XFEmbeddSQLiteFile/App.cs#L39)
63
+
64
+ これであとは普通に利用できるはずです。
65
+ 参考にどうぞ

1

文章内のURLをリンクに修正

2016/11/17 06:34

投稿

nuits.jp
nuits.jp

スコア346

answer CHANGED
@@ -1,13 +1,13 @@
1
1
  Xamarin.FormsからSQLiteを利用する方法は、公式のHP上で紹介されています。
2
2
  まずはひとまずこの通り実施してみると良いかと思います。
3
3
 
4
- https://developer.xamarin.com/guides/xamarin-forms/working-with/databases/
4
+ [https://developer.xamarin.com/guides/xamarin-forms/working-with/databases/](https://developer.xamarin.com/guides/xamarin-forms/working-with/databases/)
5
5
 
6
6
  またPCLのSQLiteライブラリはNuGet上に複数ありますが、どれを使うべきかは、手前味噌ですがこちらを参考にしてみてください。
7
- http://www.nuits.jp/entry/2016/06/27/193455
7
+ [http://www.nuits.jp/entry/2016/06/27/193455](http://www.nuits.jp/entry/2016/06/27/193455)
8
8
 
9
9
  また、ここまでの方法ではファイル生成部分にDependencyServiceを利用する必要がありますが、PCLStorageというPlugins for Xamarinのライブラリをうまく利用すると単一コードで記述することも可能です。
10
10
  またまた手前みそですが、こちらに少しその辺のノウハウを記載しています。
11
- http://www.nuits.jp/entry/2016/06/27/191636
11
+ [http://www.nuits.jp/entry/2016/06/27/191636](http://www.nuits.jp/entry/2016/06/27/191636)
12
12
 
13
13
  ひとまずこれらの情報をベースに試してみることをお勧めします。