WindowsストアアプリでSQLiteを用いたローカルデータベースの利用 〜実装編〜
Microsoft Surface がアメリカ等で予約開始されましたね^^
僕もほしいですが,日本語キーボードじゃないのと輸入するのに税金とかかかりそうなので,日本モデルを待とうと思ってます.
あと,キーボードの色も付属だと選択できないみたいですし…
(ちなみにセットの方が安い)
さてさて,前回の続きで,今回は実装編です.
前回は,SQLiteを使えるようにしました.
今回は実際にSQLiteを使ってローカルデータベースを構築します.
開発言語として,XAML+C#を用います
では,説明します.
まずは,Visual Studio 2012 を起動しましょう
初めての起動時には,どの言語で開発をしますか?と聞かれると思うので,今回はわかりやすくC#を選択しましょう
ファイル→新規作成→プロジェクトを選び,テンプレート→Visual C#→Windows ストアの新しいアプリケーション(XAML)を選び,プロジェクト名を入力してOKを押します
※今回は,SQLiteAppとしました
まず,MainPage.xamlとMainPage.xaml.csを開きましょう
MainPage.xamlのGrid内にListViewコントロールを追加します(下はわかりやすくGrid部分の記述もしています.)
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <ListView x:Name="Food_listview" Width="500" HorizontalAlignment="Center" VerticalAlignment="Center" Header="食べ物リスト"/> </Grid>
次に,前回作成したsqlite3.dllをプロジェクトに埋め込みましょう.
ソリューションエクスプローラから自分のプロジェクトを右クリックして,追加→既存の項目を選びます
そして,作成したsqlite3.dllを選択します.
場所は,C:\sqliteにあると思います.
追加したら,sqlite3.dllのプロパティを開き,出力ディレクトリにコピーの値を常にコピーするに変更しましょう
次は,SQLiteを用いるために,オンラインからパッケージを追加します.
参照設定を右クリックし,NuGetパッケージの管理を選びます
オンラインを選び,右上の検索欄にsqlite-netと入力し,sqlite-
netをインストールします
続いて,参照設定を右クリックし,参照の追加を押します
Windows→拡張にあるMicrosoft Visual C++ Runtime Packageにチェックを入れ,OKを押します
このままだと,x86で動作するかx64で動作するかわからず,今追加したC++ Runtimeがエラーを起こします.
なので,明示的にプロセッサを指定する必要があります.
ビルド→構成マネージャーを押します
アクティブ ソリューション プラットフォーム を Any CPU からx86に変えます.
これで,全て設定は完了です.
データベース部分を実装したいと思います
まずは,SQLiteを参照します
using SQLite;
次に,このアプリがロードし終わったときに,データベースを作成するようにします.
コンストラクタ部分にLoadedイベントを追加します
public MainPage() { this.InitializeComponent(); Loaded += MainPage_Loaded; }
データベースのテーブルを用意するため,Foodクラスを用意します
public class Food { // 主キー,自動連番 [AutoIncrement, PrimaryKey] public int Id { get; set; } // カラムの型と名前 public string Name { get; set; } public int Price { get; set; } public int Calorie { get; set; } // 出力形式 public override string ToString() { return string.Format("商品名:{0}\t価格:{1}円\tカロリー:{2}kcal", Name, Price, Calorie); } }
Loadedイベント内を実装します.
void MainPage_Loaded(object sender, RoutedEventArgs e) { // データベース保存先と,データベースファイルの名前を決める var dbpath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "FoodList.db"); // dbpathで指定したデータベースファイルに,接続する using (var db = new SQLite.SQLiteConnection(dbpath)) { // テーブルを作成 db.CreateTable<Food>(); // トランザクション処理 db.RunInTransaction(() => { // レコードの作成 db.Insert(new Food() { Name = "醤油ラーメン", Price = 500, Calorie = 700 }); db.Insert(new Food() { Name = "きつねうどん", Price = 350, Calorie = 500 }); db.Insert(new Food() { Name = "カレーライス", Price = 450, Calorie = 1000 }); db.Insert(new Food() { Name = "ポテトチップス", Price = 200, Calorie = 600 }); }); // ListViewのソースに設定する Food_listview.ItemsSource = db.Table<Food>(); } }
参考にさせていただいたページ
http://timheuer.com/blog/archive/2012/05/20/using-sqlite-in-metro-style-app.aspx
http://timheuer.com/blog/archive/2012/06/05/howto-video-using-sqlite-in-metro-style-app.aspx