【WindowsPhone】利用反射初始化和添加 SQLite数据库

首先引用命名空间

using System.Reflection

了解一下 Assembly 类

//
// 摘要:
//     表示一个程序集,它是一个可重用、无版本冲突并且可自我描述的公共语言运行时应用程序构造块。
public abstract class Assembly

我们把Model类都约定好放在同一个命名空间下,下面以User类为例:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using SQLite;
 7 using Backyard.Common;
 8 namespace MyAssembly.Models
 9 {
10     [Table("User")]
11     public class User
12     {
13         public User()
14         {
15         }
16         [PrimaryKey,AutoIncrement]
17         public int Id { get; set; }
18
19         [NotNull]
20         public string Pwd { get; set; }
21         public DateTime ResetTime { get; set; }
22
23         public AccountStatus AccountStatus { get; set; }
24
25     }
26 }

我们在看看SQLite CreateTable 方法

/// <summary>
/// Executes a "create table if not exists" on the database. It also
/// creates any specified indexes on the columns of the table. It uses
/// a schema automatically generated from the specified type. You can
/// later access this schema by calling GetMapping.
/// </summary>
/// <param name="ty">Type to reflect to a database table.</param>
/// <param name="createFlags">Optional flags allowing implicit PK and indexes based on naming conventions.</param>
/// <returns>
/// The number of entries added to the database schema.
/// </returns>
public int CreateTable(Type ty, CreateFlags createFlags = CreateFlags.None)

也就是说 ,当表存在时,调用CreateTable时是不会将已经存在的表覆盖的,表不存在时,则创建数据表。

好了  ,了解了这些  ,我们就可以说说怎么 初始化/添加新的数据表了

//根据数据库地址获取 SQLiteConnection
public static SQLiteConnection GetConn()
{
      return new SQLiteConnection(DBSetting.DBPath);
}
//获取一个程序集对象 通过当前APP的程序集名称
Assembly ass = Assembly.Load(new AssemblyName("MyAssembly"));

//获取该程序集中的 公共类型集合
var types = ass.ExportedTypes;

using (var conn = GetConn())
{
    foreach (var t in types)
    {
         if (t.Namespace == "MyAssembly.Models")
         {
            //这个时候 ,如果数据库不存在 ,就会创建数据库
            conn.CreateTable(t);
         }
    }
}

我们可以在 APP首次启动时 执行一次这个过程  ,不管是首次安装,还是  更新的新版本  ,都可以保证SQLite数据表的完整。

转载原创文章请注明,转载自: 老朱的自留地 » 【WindowsPhone】利用反射初始化和添加 SQLite数据库

时间: 2024-08-02 11:02:29

【WindowsPhone】利用反射初始化和添加 SQLite数据库的相关文章

利用反射技术实现POJO的数据库操作

记得第一次写项目的时候,傻傻的数据库一张表,代码里就写一个DAO类,几张表就写几个DAO类,大量的重复代码,自己粘着都嫌烦,后来接触了Hibernate,不得不说对我们这种小白用处还是很大的,那么多的实体类,一个DAO就可以实现基本的数据库操作了,于是我用的不亦乐乎,但到底是怎么做的,从来没有考虑过,现在用这些框架已经有一段时间了,原谅我脑洞大开,想自己实现一下这种类似的功能: 在准备写之前,我们需要一些规则: 1.由实体类名,可以知道我这个类是存放在哪张表里---这里我采用的是和t_类名 2.

iOS sqlite数据库实现(转)

转载自:http://www.cnblogs.com/macroxu-1982/archive/2012/10/01/2709960.html 1 实现过程添加libsqlite3组件 选择项目后,在展示的xcodepro文件配置界面中配置 build phases -> Link Binary With Libraries -->+ -->libsqlite3.dylib 2 在当前项目中添加sqlite 数据库 3 实现app运行时,将sqlite文件复制到沙盒中 4 实现查询数据库

安卓项目-利用Sqlite数据库,开发新闻发布系统

本教程致力于程序员可以快速的学习安卓移动端手机开发. 适合于已经习得一种编程语言的同仁. 更多志同道合,想要学习更多编程技术的大神们. 小弟不才,麻烦关注一下我的今日头条号-做全栈攻城狮. 本文章是基于上篇文章基础之上进行深入学习的.程序员带你学习安卓开发-XML文档的创建与解析 Sqlite数据库: Sqlite数据库是在安卓中使用较广泛的数据库.其为简单.轻巧的Sql类文件型数据库.因以简单的文本形式保存,所以安全性不是很高.只要拿到sqlite数据库文件就可以得到数据.所以这就决定了sql

Android下利用SQLite数据库实现增删改查

1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3:  sqlite3 数据库 4   接下来就可以进行数据库的sql语法的使用了 bean对象: public class Person { private int id; private String name; private String number; } 数据库的创建以及表的创建: package com.example.db; import android.

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理 2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论:0 | 浏览:45 | 该类在MVC中可以方便管理配置信息,可以直接把Model储存进数据库或者从数据库去除数据转为Model. 1 何为配置项目? 比如网站的名称,页脚信息,meta中的KeyWord信息等,如果不想硬编码到网页里,就需要使用配置文件进行储存,通常都是储存到数据库中.使用的时候读取出来

利用反射处理多个表结构相同的数据的查询和数据库表的关联

最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样 前期将各个表中的字段也进行了统一 抽象出一张字典表 将街道编号和街道的名字的首字母连接起来,因为查询的时候是利用街道编号来的,这样可以根据街道标号拼出相对于的街道表的名字,(每个人口相关的表不止一张,因此需要统一):在查询过程中,将查询到的结构返回一个LIST,(不同的表在dao中当然对于不同的类啊,返回来再判断是哪一类),然后利用反射Field[]

Android中用文件初始化sqlite 数据库(二)

博 androidsqlite启动时数据库初始化 方法1已经讲述了一种初始化数据库的方法 它的数据库初始化不是用sql语句,而是用一个现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径中.我一方面不太放心这种二进制文件的直接copy,另一方面,如果sqlite数据库的二进制结构有所升级或变动,我的程序就无法对所有sqlite版本兼容了. 方法2:在启动时,执行sql文件进行数据库初始化. SQLiteOpenHelper的onCreate仅在程序第一次使用数据库时执行

android中sqlite数据库的基本使用和添加多张表

看了很多关于android使用sqlite数据库的文章,很多都是介绍了数据库的建立和表的建立,而表通常都是只建立一张,而实际情况我们用到的表可能不止一张,那这种情况下我们又该怎么办呢,好了,下面我教大家如何在sqlite数据库中建立多张表. 首先是如何建立数据库和表: 建立一个类继承SQLiteOpenHelper,即: public class ReaderOpenHelper extends SQLiteOpenHelper 然后添加构造方法: public ReaderOpenHelper