c#发展

首页 » 常识 » 预防 » C井实现安卓和iOSapp读写数据库,实
TUhjnbcbe - 2024/8/24 16:25:00
白驳风那里治得最好 http://www.bdfzkyy.com/

一、向源代码添加SQLite

向解决方案添加NuGet包

右击解决方案管理解决方案的NuGet程序包

在“浏览”选项卡中搜索“sqlite-net-pcl”NuGet包,如上图

许多NuGet包都有着类似的名称。正确找到项目要用的包,具有以下属性:

作者:SQLite-net

NuGet链接:sqlite-net-pcl

二、向源代码加入数据库代码

有三层架构的开发经验的人员,了解MVC框架的开发者,会很熟悉下面的代码。

1、项目中添加Models文件夹

2、向Models文件夹下添加cs文件,取名“StockDiff.cs”,它是对应SQLite表的类。相当于MVC中的M

3、项目中添加Data文件夹

4、向Data文件夹下添加cs文件,取名“StockDiffDatabase.cs”,它则是类似于三层架构中数据库操作类。代码如下:

publicclassStockDiffDatabase

{

SQLiteAsyncConnectiondatabase;

publicStockDiffDatabase(stringdbpath)

{

try

{

database=newSQLiteAsyncConnection(dbpath);

database.CreateTableAsyncModels.StockDiff().Wait();

}

catch(Exceptionex)

{

throwex;

}

}

publicSystem.Threading.Tasks.TaskListModels.StockDiffGetListAsync()

{

try

{

returndatabase.TableModels.StockDiff().ToListAsync();

}

catch(Exceptionex)

{

throwex;

}

}

publicTaskModels.StockDiffGetOneAsync(intid)

{

try

{

return

database.TableModels.StockDiff().Where(i=i.ID==id).FirstOrDefaultAsync();

}

catch(Exceptionex)

{

throwex;

}

}

publicTaskintSaveUpdateAsync(Models.StockDiffitem)

{

try

{

if(item.ID!=0)

{

return

database.UpdateAsync(item);

}

else

{

return

database.InsertAsync(item);

}

}

catch(Exceptionex)

{

throwex;

}

}

publicTaskintDelete(Models.StockDiffo)

{

try

{

returndatabase.DeleteAsync(o);

}

catch(Exceptionex)

{

throwex;

}

}

publicTaskintDeleteAll()

{

try

{

TableMappingm=newTableMapping(typeof(Models.StockDiff));

returndatabase.DeleteAllAsync(m);

}

catch(Exceptionex)

{

throwex;

}

}

}

上述C#数据库操作类需要的引用如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSQLite;

此块C#源码包含创建数据库、读取数据、写入数据以及删除单行数据和清空数据的代码。代码使用后台线程的异步SQLite.NETAPI。此外,StockDiffDatabase构造函数将数据库文件的路径作为参数。

三、让安卓和iOS应用调用上述操作数据库代码

App.xaml.cs是整个程序的入口,所以数据库的初始化在此处执行

下面的代码相当于MVC框架中的V的内容,就是在界面上操作按钮,打开APP数据加载并显示

1、展开“App.xaml”,然后双击“App.xaml.cs”将其打开,添加代码

此处使用了单一实例模式,无论是JAVA还是C#开发者,都能很容易看明白此处代码。,将SQLite数据库文件路径做为参数,实例化数据库操作类。这样就可以在后续功能中使用它。

2、在按钮中实现保存功能

Models.StockDiffoo=newModels.StockDiff();

oo.Amt=int.Parse(txtAmt.Text);

oo.PriceSold=decimal.Parse(txtSold.Text);

oo.PriceBuy=decimal.Parse(txtBuy.Text);

oo.PriceFinal=decimal.Parse(fin.ToString("f2"));

Taskintii=App.Database.SaveUpdateAsync(oo);

((Button)FindByName("btnClear")).IsVisible=true;

App.Database.SaveUpdateAsync()方法使用了LINQ,所以并不需要我们再写Insert或update了。保存数据后,会显示btnClear清空按钮,用于清空列表显示

3、从数据库读取数据并绑定控件显示

基于移动端控件的不同,这里肯定不再像以前c#winform,asp.net中那些datagrid,repeater这样的控件。这里使用的是移动端开发独有的TableView,StackLayout控件。

protectedoverrideasyncvoidOnAppearing()

{

base.OnAppearing();

TableViewtbv=(TableView)FindByName("tbV");

ListModels.StockDifflst=awaitApp.Database.GetListAsync();

if(lst.Count==0)

{

((Button)FindByName("btnClear")).IsVisible=false;

}

foreach(Models.StockDiffoinlst)

{

#region

try

{

varlayout=newStackLayout(){Orientation=StackOrientation.Horizontal};

layout.Children.Add(newLabel()

{

Text=o.Amt.ToString(),

TextColor=Color.FromHex("#"),

VerticalOptions=LayoutOptions.Center

});

layout.Children.Add(newLabel()

{

Text=o.PriceSold.ToString(),

TextColor=Color.FromHex("#"),

VerticalOptions=LayoutOptions.Center,

});

layout.Children.Add(newLabel()

{

Text=o.PriceBuy.ToString(),

TextColor=Color.FromHex("#"),

VerticalOptions=LayoutOptions.Center,

});

layout.Children.Add(newLabel()

{

Text="结果:"+o.PriceFinal.ToString("f2"),

TextColor=Color.FromHex("#0f0f0f"),

VerticalOptions=LayoutOptions.Center,

HorizontalOptions=LayoutOptions.EndAndExpand

});

tbv.Root.Insert(

0,

newTableSection()

{

newViewCell(){View=layout}

}

);

}

catch(Exceptionex)

{

}

#endregion

}

}

OnAppearing是在app加载界面时会执行的方法,绑定数据并显示就写在此。

原理:

从本机数据库中读取数据放进LIST中

以Stacklayout方式动态的将LIST中的数据加载进来后塞进TableView中完成在app界面中展示数据(这样的方式展示数据是基于tableview控件的展示需要,是用Tableview还是其它控件则由开发者决定,不同的控件则这里的代码就会不同)

如果数据没有则隐藏btnClear清空按钮,如果有数据则不隐藏。

写在最后:

通过Xamarin,C#开发者可以很容易的上手开发安卓和iOSapp读写手机本地数据库存储,而且是一份代码两种APP跨平台使用。

C#和JAVA开发者烂熟于心的三层架构、MVC、数据库单例模式的开发思维,也可毫无阻碍的使用在跨平台的app开发中

荐于Xamarin,C#和.NET开发者,对于JAVA开发者,python开发者在移动端开发上,更有优势。

推荐阅读下方往期文章,完整舒述C#跨平台开发iOS和Android

往期文章:

用微软编程,在iphone真机上运行调试app

C国内已放弃?一份源码同时完成Android和IOS两种APP

1
查看完整版本: C井实现安卓和iOSapp读写数据库,实