Xamarin.Formsで使えるSQliteのモジュール、なかなか使えそうでちょっと試してみた
とは言え、コードは
こちらのサイトからパクった物
割とあっさり成功
Createもクラスのメンバを元に勝手に作ってくれて、InsertやSelectも問題無さそう
ちなみにBeginTransaction,Commit,RollbackもInsertの時に試したらうまく動いてくれた
上記のサイトのButton2_clickedを
// Insert
private void Button2_Clicked(object sender, EventArgs e)
{ // データ追加
using (var db = new SQLite.SQLiteConnection(DbPath))
{ // Insert
db.BeginTransaction();
db.Insert(new Tran() { Name = "Tran 12 Name", TimeStamp = DateTime.Now, Value = 1.1m });
db.Insert(new Tran() { Name = "Tran 23 Name", TimeStamp = DateTime.Now, Value = 2.2m });
db.Insert(new Tran() { Name = "Tran 34 Name", TimeStamp = DateTime.Now, Value = 3.3m });
db.Insert(new Tran() { Name = "Tran 45 Name", TimeStamp = DateTime.Now, Value = 4.4m });
db.Commit();
}
}
みたいな感じに書き換えてテストしただけだけど
んじゃあ、元からあるクラスを継承して作ったクラスはどんなテーブルが作られるのか
と言うわけで、
/// <summary>
/// Tranを継承しただけのクラス
/// </summary>
public class Tran2 : Tran
{
public string date2 { get; set; }
public int name2 { get; set; }
}
と言うクラスと言う構造のテーブルをCreateしたら、カラム名はどのように並ぶのだろう
と試したところ、
継承したクラスのメンバが、先に来るんですな・・・
まじか・・
てことは継承元は後ろの方に行ってしまうのかぁ
今考えている脳内設計をちょっと変えないといけない
元からあるクラスをちょいと継承してテーブルに仕立てようと思ったんだけど
むーん・・・・
まあ、こういう動きをするって事がわかったんだったら、継承した方が先になって作られる前提で設計すればいいわけなので、まあ進めるとしますか
何かやるときはやっぱりこういう単機能のアプリを作って試すのは大切だね
ちなみに、全ソースはこの下
真似する人はパクリ元のサイトはちゃんと読んでね
nugetで取り込むパッケージとか書いてあるから
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace TestSqlite
{
public class Tran
{
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public DateTime TimeStamp { get; set; }
public decimal Value { get; set; }
}
/// <summary>
/// Tranを継承しただけのクラス
/// </summary>
public class Tran2 : Tran
{
public string date2 { get; set; }
public int name2 { get; set; }
}
public partial class MainPage : ContentPage
{
public static string DbPath { get; } = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "SQLiteDataBase.db");
public MainPage()
{
InitializeComponent();
var sl = (StackLayout)(this.Content = new StackLayout());
var button1 = new Button() { Text = "Create Table" };
var button2 = new Button() { Text = "Insert" };
var button3 = new Button() { Text = "Select" };
var button4 = new Button() { Text = "Query" };
var button5 = new Button() { Text = "Create2" };
sl.Children.Add(button1);
sl.Children.Add(button2);
sl.Children.Add(button3);
sl.Children.Add(button4);
sl.Children.Add(button5);
button1.Clicked += Button1_Clicked;
button2.Clicked += Button2_Clicked;
button3.Clicked += Button3_Clicked;
button4.Clicked += Button4_Clicked;
button5.Clicked += Button5_Clicked;
}
private void Button5_Clicked(object sender, EventArgs e)
{
// データベース初期設定
using (var db = new SQLite.SQLiteConnection(DbPath))
{ // Create Table
db.CreateTable<Tran2>();
}
}
// Query
private void Button4_Clicked(object sender, EventArgs e)
{ // データ取得
using (var db = new SQLite.SQLiteConnection(DbPath))
{ // Select
foreach (var row in db.Query<Tran>("Select * From Tran Where Name like ? ", $"%3%"))
Console.WriteLine($"Tran: {row.Id}, {row.Name}, {row.TimeStamp}, {row.Value}");
}
}
// Select
private void Button3_Clicked(object sender, EventArgs e)
{ // データ取得
using (var db = new SQLite.SQLiteConnection(DbPath))
{ // Select
foreach (var row in db.Table<Tran>().Where(r => r.Name.Contains("3")))
Console.WriteLine($"Tran: {row.Id}, {row.Name}, {row.TimeStamp}, {row.Value}");
}
}
// Insert
private void Button2_Clicked(object sender, EventArgs e)
{ // データ追加
using (var db = new SQLite.SQLiteConnection(DbPath))
{ // Insert
db.BeginTransaction();
db.Insert(new Tran() { Name = "Tran 12 Name", TimeStamp = DateTime.Now, Value = 1.1m });
db.Insert(new Tran() { Name = "Tran 23 Name", TimeStamp = DateTime.Now, Value = 2.2m });
db.Insert(new Tran() { Name = "Tran 34 Name", TimeStamp = DateTime.Now, Value = 3.3m });
db.Insert(new Tran() { Name = "Tran 45 Name", TimeStamp = DateTime.Now, Value = 4.4m });
db.Commit();
}
}
// Create Table
private void Button1_Clicked(object sender, EventArgs e)
{ // データベース初期設定
using (var db = new SQLite.SQLiteConnection(DbPath))
{ // Create Table
db.CreateTable<Tran>();
}
}
}
}
コメント
コメントを投稿