一、向源代码添加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”,它则是类似于三层架构中数据库操作类。代码如下:

    public class StockDiffDatabase{SQLiteAsyncConnection database;public StockDiffDatabase(string dbpath){try{database = new SQLiteAsyncConnection(dbpath);database.CreateTableAsync<Models.StockDiff>().Wait();}catch (Exception ex){throw ex;}}public System.Threading.Tasks.Task<List<Models.StockDiff>> GetListAsync(){try{return database.Table<Models.StockDiff>().ToListAsync();}catch (Exception ex){throw ex;}}public Task<Models.StockDiff> GetOneAsync(int id){try{returndatabase.Table<Models.StockDiff>().Where(i => i.ID == id).FirstOrDefaultAsync();}catch (Exception ex){throw ex;}}public Task<int> SaveUpdateAsync(Models.StockDiff item){try{if (item.ID != 0){returndatabase.UpdateAsync(item);}else{returndatabase.InsertAsync(item);}}catch (Exception ex){throw ex;}}public Task<int> Delete(Models.StockDiff o){try{returndatabase.DeleteAsync(o);}catch (Exception ex){throw ex;}}public Task<int> DeleteAll(){try{TableMapping m = new TableMapping(typeof(Models.StockDiff));return  database.DeleteAllAsync(m);}catch (Exception ex){throw ex;}}}

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

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using SQLite;

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


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

  • App.xaml.cs 是整个程序的入口,所以数据库的初始化在此处执行
  • 下面的代码相当于MVC框架中的V的内容,就是在界面上操作按钮,打开APP数据加载并显示

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

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

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

Models.StockDiff oo = new Models.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"));Task<int> ii =  App.Database.SaveUpdateAsync(oo);((Button)FindByName("btnClear")).IsVisible = true;

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

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

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

protected override async void OnAppearing()
{base.OnAppearing();TableView tbv = (TableView)FindByName("tbV");List<Models.StockDiff> lst =  await App.Database.GetListAsync();if (lst.Count == 0){((Button)FindByName("btnClear")).IsVisible = false;}foreach (Models.StockDiff o in lst){#regiontry{var layout = new StackLayout() { Orientation = StackOrientation.Horizontal };layout.Children.Add(new Label(){Text = o.Amt.ToString(),TextColor = Color.FromHex("#503026"),VerticalOptions = LayoutOptions.Center});layout.Children.Add(new Label(){Text = o.PriceSold.ToString(),TextColor = Color.FromHex("#503026"),VerticalOptions = LayoutOptions.Center,});layout.Children.Add(new Label(){Text = o.PriceBuy.ToString(),TextColor = Color.FromHex("#503026"),VerticalOptions = LayoutOptions.Center,});layout.Children.Add(new Label(){Text = "结果:" + o.PriceFinal.ToString("f2"),TextColor = Color.FromHex("#0f0f0f"),VerticalOptions = LayoutOptions.Center,HorizontalOptions = LayoutOptions.EndAndExpand});tbv.Root.Insert(0,new TableSection(){new ViewCell() {View = layout}});}catch (Exception ex){}#endregion}}

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

原理:

  1. 从本机数据库中读取数据放进LIST中
  2. 以Stacklayout方式动态的将LIST中的数据加载进来后塞进TableView中完成在app界面中展示数据(这样的方式展示数据是基于tableview控件的展示需要,是用Tableview还是其它控件则由开发者决定,不同的控件则这里的代码就会不同)
  3. 如果数据没有则隐藏btnClear清空按钮,如果有数据则不隐藏。

写在最后:

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

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

Xamarin难道还是鸡肋吗????

博主往期文章:

c# 比JAVA弱吗? 用c#一份源码同时生成安卓和IOS APP

.NET C#开发app在iphone 真机上运行调试

C# 实现安卓和iOS app 读写数据库,实现手机本地存储相关推荐

  1. Android(安卓)订餐APP(Sqlite数据库,完整的增删改查)

     Android(安卓)订餐APP(Sqlite数据库,完整的增删改查) 一.背景 首先说说项目的背景,基于地铁口鸡蛋饼的一个小项目,APP中固定设置的鸡蛋饼搭配,顾客也可以自己搭配 二.开发环境 A ...

  2. c# 比JAVA弱吗? 用c#一份源码同时生成安卓和IOS APP

    Visual Studio 2019调试 安卓和IOS开发的app  上图为C# 同一份源码在红米note 1S 的真机上运行安卓app,和iphone 13 模拟器运行ios版app. (因为ios ...

  3. 苹果手机 微信PHP问题,安卓、ios APP调用微信支付时,页面出现空白 。(php微信支付,app发起微信支付白屏)?...

    安卓.ios APP调用微信支付时,页面出现空白 我的后端是用php开发的.我是先调用微信的统一下单生成,生成prepay_id预支付订单号,代码如下: public function send_pa ...

  4. android源码 meizhi,74款安卓和IOS app源码地址

    知乎专栏App https://github.com/bxbxbai/ZhuanLan WeChat高仿微信 项目地址: https://github.com/motianhuo/wechat Gan ...

  5. (安卓,IOS系统)按键精灵手机版连接sqlserver ,mysql等远程数据库,进行批量自动处理。

    好消息!!! 开放免费的数据云存储平台:数据云空平台 默认账号:demo,密码:123456 通过按键精灵批量读取服务器上游戏账号列表,进行登录功能,可用来搬砖... 入主题: ☞☞首先服务器端搭建个 ...

  6. iOS App更换图标Logo(本地更换)

    1.各大购物平台在节假日都是更换App Icon图标 通常有两种方式:1.每换一个新的图标,需要重新上一次AppStore: 2.在项目里预留好未来需要更换的图标,用api触发(或者本地时间判断自动更 ...

  7. app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览

    ylerjen.. 17 AppCache使用清单文件来定义应用程序应该存储哪些文件(您可以缓存文件和资源,如HTML页面,JS脚本,CSS样式,图像......) LocalStorage将存储数据 ...

  8. 深度linux支持安卓,深度操作系统 V20(1003)内测版招募:新增手机助手,支持安卓和 iOS 端,管理手机应用、文件...

    IT之家9月28日消息 深度操作系统今天发布深度操作系统 20(1003)内测活动招募说明,IT之家获悉,本次操作系统将新增手机助手,支持安卓和iOS端,方便管理手机应用.文件等. 更新说明: 1.新 ...

  9. ios app开发学习流程(入门到精通)

    一.xcode编译并运行app后,iphone模拟器已安装的app所在目录: # 1. /Users/alpha/Library/Application Support/iPhone Simulato ...

最新文章

  1. {}是set类型还是dict类型呢
  2. android subString
  3. 今天在海淀黄庄地铁站真实经历 写下来希望我的好友可以看一下!
  4. 七大因素阻碍非标自动化行业发展,那么应对的策略是什么呢?
  5. linux awk 常见字符串处理
  6. html 标签内背景图片自适应 div 大小
  7. LeetCode 287. Find the Duplicate Number
  8. windows下javadoc生成文档注释的命令
  9. 写项目经历的注意事项
  10. [tensorflow]tensorflow2.1.0使用内置方法进行培训和评估
  11. h3c,nat网络地址转换
  12. .html() 与.text() 获取值、取值 区别
  13. 一文搞懂深度学习中常用的优化算法
  14. nuxt.js项目打包上传服务器pm2启动各种问题
  15. 一个月攻克托业--复旦大学考生
  16. 2018高中计算机会考时间,2018高中会考时间安排_2018年高中会考什么时候考哪些科目...
  17. 给大家推荐一下常用的镜像站
  18. Planned Contrasts and Post hoc Tests 多重检验校正
  19. iphone 4 微信版本过低
  20. ERROR 1010 (HY000): Error dropping database (can't rmdir './library', errno:

热门文章

  1. 为什么生命科学企业都在陆续上云?
  2. mysql修改表前缀操作步骤
  3. SQL语言——更新操作命令
  4. 【STM32F407】第2章 ThreadX FileX文件系统介绍
  5. tomcat重启警告:Abandoned connection cleanup thread 服务器宕机解决方案
  6. 在office如何安装翻译软件插件
  7. Intel SGX开发者参考书(四)—— Enclave开发基础(三)
  8. 这么多的内置函数能记住吗?对python的68个内置函数分类总结!
  9. 中级宏观经济学复习范围(马工程)
  10. C#实现繁体简体转换方法总结|ASP.NET.分享