質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

10148閲覧

Xamarin.Formsに別の個所で作成したSQLiteを導入したい

ze_ze_ze

総合スコア14

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2016/11/15 05:42

編集2016/11/15 13:45

###前提・実現したいこと
現在特徴を元に検索する図鑑アプリをXamarin.Formsで作っているのですが、
名前や特徴をSQLiteで入力したデータベースをXamarinに導入する方法が分からなくて困っています。
やり方が分かる方教えてください。
よろしくお願いします。

※xamarinのみでのデータベースの構築は出来るのですが別の個所で作ったテーブル状のSQLiteをxamarinに読み込む方法が分かりません。

###補足情報(言語/FW/ツール等のバージョンなど)

開発環境
Visual Studio 2015
Windows 10
Xamarin.Forms.Portable
DB Browser for SQLite
.sqlite

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Xamarin.FormsからSQLiteを利用する方法は、公式のHP上で紹介されています。
まずはひとまずこの通り実施してみると良いかと思います。

https://developer.xamarin.com/guides/xamarin-forms/working-with/databases/

またPCLのSQLiteライブラリはNuGet上に複数ありますが、どれを使うべきかは、手前味噌ですがこちらを参考にしてみてください。
http://www.nuits.jp/entry/2016/06/27/193455

また、ここまでの方法ではファイル生成部分にDependencyServiceを利用する必要がありますが、PCLStorageというPlugins for Xamarinのライブラリをうまく利用すると単一コードで記述することも可能です。
またまた手前みそですが、こちらに少しその辺のノウハウを記載しています。
http://www.nuits.jp/entry/2016/06/27/191636

ひとまずこれらの情報をベースに試してみることをお勧めします。

2016.11.17 追記
アプリにDBファイルを添付して配布したいとのことでしたので、その方法を追記したいと思います。
なお、動くソースコードをこちらに公開していますので、併せて確認してみてください。
https://github.com/nuitsjp/XamarinSamples
ここのXFEmbeddSQLiteFile.slnを開いてください。

さて、手順的には次のように実装します。

  1. PCLのソリューションに別途作成したSQLiteデータベースファイルを配置しプロパティを「埋め込みリソース」に変更する
  2. プロジェクトに、sqlite-net-pclとPCLStorageを追加する
  3. コードを記述する

コードは以下の感じです。

cs

1const string databaseFileName = "sqlite.db3"; 2// ルートフォルダを取得する 3IFolder rootFolder = FileSystem.Current.LocalStorage; 4// ファイルシステム上のDBファイルの存在チェックを行う 5var result = await rootFolder.CheckExistsAsync(databaseFileName); 6if (result == ExistenceCheckResult.NotFound) 7{ 8 // 存在しなかった場合、新たに空のDBファイルを作成する 9 var newFile = await rootFolder.CreateFileAsync(databaseFileName, CreationCollisionOption.ReplaceExisting); 10 // Assemblyに埋め込んだDBファイルをストリームで取得し、空ファイルにコピーする 11 var assembly = typeof(App).GetTypeInfo().Assembly; 12 using (var stream = assembly.GetManifestResourceStream("XFEmbeddSQLiteFile.sqlite.db3")) 13 { 14 using (var outputStream = await newFile.OpenAsync(FileAccess.ReadAndWrite)) 15 { 16 stream.CopyTo(outputStream); 17 outputStream.Flush(); 18 } 19 } 20} 21 22// ファイルからコネクションを作成しデータを取得する 23var file = await rootFolder.CreateFileAsync(databaseFileName, CreationCollisionOption.OpenIfExists); 24using (var connection = new SQLiteConnection(file.Path)) 25{ 26 var builder = new StringBuilder(); 27 foreach (var customer in connection.Table<Customer>()) 28 { 29 builder.Append($"Id:{customer.Id} Name:{customer.Name}, "); 30 } 31 label.Text = builder.ToString(); 32}

https://github.com/nuitsjp/XamarinSamples/blob/master/XFEmbeddSQLiteFile/XFEmbeddSQLiteFile/App.cs#L39

これであとは普通に利用できるはずです。
参考にどうぞ

投稿2016/11/15 05:53

編集2016/11/17 06:34
nuits.jp

総合スコア346

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ze_ze_ze

2016/11/15 06:48

回答ありがとうございます。 情報不足で申し訳ありません。 これらの情報は試し済みで、データベースを構築することは出来るのですが、自分で作ったSQLiteを読み込む作業のやり方が分からなくて困っています。 お手数かけます。やり方がわかるようでしたら教えてください。 よろしくお願いします。
nuits.jp

2016/11/15 07:41

自分で作ったSQLiteの意図がちょっと良くわかりません。 別の個所(例えばPC上)で作成されたSQLiteファイルを取り込んで、Xamarin.Forms上で利用したいという意味ですか?
ze_ze_ze

2016/11/15 13:43

分かりにくくてすみません。 そうです。そういう意味です。 やり方分かるようでしたら教えてください。 よろしくお願いします。
nuits.jp

2016/11/16 09:00

外部で作成したデータベースを利用するのと、アプリケーションで作成したデータベースの2回目以降の利用方法は全く同じです。 異なるのは、作るか、取ってくるかだけなので、SQLiteの問題としは本質的に無関係だと思います。 このため、SQLiteの利用方法の説明は割愛させてください。 このため、説明が必要なのは、どこかからデータベースファイルを取得してきて、どうローカルのファイルに置くかが問題になると思います。 実際に多そうなケースは次のいずれかだと思いますが、いずれでしょうか? * インターネット上のどこかに置かれたファイルをダウンロードしてきて利用する * アプリに埋め込む
ze_ze_ze

2016/11/17 03:11

回答ありがとうございます。 私がやりたい方法は 「アプリに埋め込む」ケースです。 よろしくお願いします。
nuits.jp

2016/11/17 06:34

本文内に解法を追記しました。 ご確認ください。
ze_ze_ze

2016/11/17 07:25

ありがとうございます。 無事問題が解決しました。 感謝感激です。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問