找回密码
 注册
关于网站域名变更的通知
查看: 297|回复: 1
打印 上一主题 下一主题

SQLite在嵌入式Wince中的应用

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-10-10 16:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
      随着科学技术的发展,嵌入式系统成为了科技发展的主要领域, Linus和Wince是比较常见的嵌入式系统。嵌入式开发过程离不开数据库的应用,对于嵌入式数据库的选择是必要的。通常,嵌入式系统选择的数据应该尽量小,SQLite[1]在Linux中的应用很广泛,本设计介绍了SQLite作为一款小巧的嵌入式数据库在Wince[2]中的应用实例。- z9 r9 k/ p3 \# S0 i. m, y
    6 U) w' F6 |8 V7 _
    1 SQLite数据库的介绍与选择) l$ \, D! V) I! G& u' E

    3 m* W8 U3 L, U* O* B; X1.1 SQLite数据库结构$ s' L8 K. v: B+ d

    ' e# {& S' ]: l) l- GSQLite数据库结构图如图1所示。
    % ?3 ?: k5 Y8 e
    ; b) Q  k  S5 ~! }1 x
    7 ?6 p2 N( o  F" k  N5 X; f: T7 v1.2 SQlite数据库的特点
    SQLite是一个开源的嵌入式关系数据库,结构紧凑,可靠性强[3]。有以下特点:
    ; N, ^& |; r8 d! z, R
    " G! r  n# W4 |1 Z( }2 u" X7 p: L- J(1)使用非常简单。只需要掌握3个核心API函数,大多数的SQL[4]语句都可以使用。7 Q/ u2 h: ?" W: W- C

    $ V6 R3 I0 A. }: M3 J1 v(2)占用很少的存储器空间。SQLite完全独立,数据库引擎和应用程序在同一系统进程中,因此运行速度较高。
    9 z9 C2 e( e+ F& _  D' M8 s+ l
    % l* g0 N9 e" B6 j( c0 [1 b(3)支持ACID事务,在系统出现问题或电源断电时不会出现数据丢失现象。
    ; f5 I! s+ P, d7 H0 d( _
    + }4 ^% {& Y3 R6 \4 W' x/ E, G. f(4)支持多种语言,像C/C++/C#等。4 E! ~: n' B# @. n0 ~

    . Q- x, U$ W6 F, T1 Q6 j; I(5)支持多个嵌入式操作系统平台,如Linux系统、Wince系统等。
    6 z8 k3 \4 I* a# u, \, P1 H7 c2 S$ ?2 a
    2 SQlite的选择
    ) m" z0 X) m; E! w
    ! u2 Y8 B$ T) c0 u3 ^# V首先,SQL Server CE是Wince自身的数据库,必须在Wince系统中安装3个文件才能使用,而SQLite只需要在电脑上安装SQlite-1.0.65.0[5],把生成的SQlite.Interop.065.DLL移植到Wince系统运行的程序中,并在Visual Studio2008写程序时添加一个引用即可,操作较简单。其次SQLite占用很少的存储器空间(150 KB~250 KB),但是SQL Server CE却要占用 1 MB~3 MB的空间。最重要的是SQLite具有良好的移植性,可以应用到多个嵌入式系统,而SQL Server CE只能在Wince中运行。1 U# B0 L2 k+ C9 G+ p/ C

    ) e/ Z! U' ]. ]2 s2 ^2 C$ w. b/ q3 SQLite的应用硬件及软件平台/ N' W, ?$ v+ t6 ?4 L

    , h) @8 E1 {; n# v, `- X5 p本文探讨中以S3C2440作为处理器ARM9的硬件平台,以Wince6.0为应用系统,支持.NET2.0平台。在Visual Studio 2008软件平台中用 C#中编写程序,但是在新建项目中选择智能设备时要选择.NET2.0平台。在Visual Studio 2008中用C#编写程序时,第一次使用时要添加引用System.Data.SQLite,在程序中添加using指令集,这样可以通过软件编写程序实现建库建表的功能。
    : L7 W- W+ k: `4 }
    8 p: s) Q* J* f4 SQLite在Wince中的应用实例
    % Q, K7 Q# m$ J" s* n, T+ d# H: [. j) v, l6 @' \/ V1 ]
    4.1 Wince中显示数据的控件DataGrid及其属性$ c- N2 P, {5 f- a4 f

    ; W5 G/ V% `+ j+ ^) i: {7 f' u+ x( uDataGrid控件实际上是一个固定的列集合,每一列的行数都是不确定的,可以看作一个用来显示数据的网格。它的网格是看不见的,只有建立了数据表,才能看到其中每一行和每一列的具体内容,如果一个单元格的文本太长,就不能在单元格中全部显示。但是在Wince系统中显示数据的控件只有这一个,所以不能完全显示数据这一问题正是本设计所要解决的。图2显示了DataGrid在Wince中的属性。* r; n6 ]1 D% z7 w

    1 K8 P; {( n' U, s4 S+ d* V5 a, J' V% z$ T
    4.2 SQLite建数据库的步骤
    8 ?7 h0 C. n* I5 ]( k* l
    # H. `! I! Z! [- ?; O& K# USQLite建数据库的步骤如下:
    * e8 b6 U) b9 D, Y* c
    ( i1 _: i: D1 ^- p* E7 H6 k(1)通过SQLiteConnection对数据库进行连接[6],通过软件建数据库,首先要有数据源,如:% S% M$ \, \8 @$ j9 p
    : u: A0 x) `/ H; ~5 x
    SQLiteConnection conn=new SQLiteConnection("Data Source=\\Program Files\\ maindata.db");
    : j& t+ s% t% ?, X! v1 S8 _6 }
    / }& x9 y* B" j% J/ C) Q% y对数据库要进行操作需要执行的命令,如SQLiteCommand cmd=new SQLiteCommand();  r3 d  J  e- z) ?2 \# L6 _, u& i

    ) t; ~9 D% M9 M(2)每次使用数据库前需要打开数据库,还需要连接数据库,关闭数据库;
    2 v  U3 n, Q( W( U9 E" ^% r1 W9 t% @7 m6 M
    (3)通过 CREATE TABLE SQL语句进行建表。必须给表注上表名,方便下面操作。如:
    % r" h4 k, m- ?+ p{cmd.CommandText="CREATETABLE ServerLert(Numintrger,BedNum varchar(20),ServerItem varchar(50),ServerTime varchar(30),Passwords varchar(30));"
    3 J7 Z+ Q  ~$ [9 p  U5 d: B# d
    2 b2 i1 ^% R, _! i" f(4)可以通过INSERT INTO 语句进行插入数据。如:
    9 a& P2 \5 F2 I  icmd.CommandText="INSERT INTO ServerLert(Num,BedNum,ServerItem,ServerTime) VALUES(1 ,′2′,′测血糖′,′10-12-10 15:50:00′)";" P4 F( b" B2 T$ o' J3 f3 P

    4 @: ^+ V) T* g# o- E6 F(5)数据库至此建成,由于插入的时间单元格不能完全显示,因此需要通过对图2中标注有灰色背景的TableStyles进行设置[7]。如:' e& ~0 y0 W: g3 |* n% R: A
    DataGridTableStyle dgts=new DataGridTableStyle();
    + C+ c) q! N3 y' U% j) Mdgts.MappingName=ds.Tables[0].TableName;$ I4 p3 _3 s+ M# N" c
    DataGridTextBoxColumn dgtbc=new DataGridTextBoxColumn();
    1 ?* s9 l, }  sdgtbc.HeaderText=ds.Tables[0].Columns[0].ColumnName;
    9 e, f5 g9 k# y# S, e/ y$ B1 F+ Idgtbc.MappingName=ds.Tables[0].Columns[0].ColumnName;
    - t5 z7 M; c3 @# Y1 N8 Kdgtbc.Width=70;2 K  m, [, C+ ?) {: \# X
    dgts.GridColumnStyles.Add(dgtbc);
      x$ O. x9 y; }' d  m* w. Q4 |% }0 M* T1 D
    上面是对表中第一列进行的宽度设置主要是对DataGridTableStyle中列的格式进行设置,这就解决了显示文本过长的问题。第二列设置80,第三列设置了170,在Wince中运行的结果。如图3所示。2 [6 J* K0 o% ~4 A/ X3 u

    / X8 p$ J' n. R' Y7 ]2 O2 T2 {% c/ Y5 y8 X6 f
    4.3 Wince通过DataGrid属性建数据库的分析, I' H7 P* F7 s8 ^9 t7 F

    + z1 c  F8 g1 W) CDataGrid在应用于基于Wince的Windows mobile[7]智能设备时,主要针对DataGridTableStyle属性进行设置[8]。根据应用于Windows mobile的原理对基于Wince的ARM9的嵌入式设备中建数据库还是行不通。对其列的属性进行操作设置仍然改变不了列的宽度,所以这种路径行不通。试了很多种方法,最后通过软件编程进行设置,得到了图3的结果。比较DataGridTableStyl进行设置与软件设置发现,问题在于表的MappingName与列的MappingName设置时,必须对应才能实现修改功能。用DataGridTableStyle设置,如果列的MappingName与数据库中的建表的列不对应,则映射不存在,从而找不到网格去显示数据,更无法对数据的列宽进行操作。所以通过软件编程,可以对建在缓存区域中的每一张表中所有的列进行操作,解决文本过长不能完全显示的问题。
    1 ^8 N7 C( N- S* I6 Q4 z3 i" L: `$ G5 a5 O( Q
    通过上面的介绍可以看出,SQLite作为开源的嵌入式数据库应用在Wince中的一个优点就是建表比较简单,不像SQL CE数据库[9],在Wince运行中需要先创建表,把所建的数据库放在Wince的系统中,添加数据源时再去绑定这个数据源。对于在.net2.0平台建立的数据库[10],添加数据源时无法找到路径,所以这种方法不可行。通过SQLite软件创建数据库的方法则可以改善上述不足。SQLite作为一款小巧的嵌入式数据库,发展前景很大,在基于ARM的Wince操作系统有着广泛应用[11]。

    ; p! n0 O, h# ~2 {! {. g4 c
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 22:36 , Processed in 0.156250 second(s), 25 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表