找回密码
 注册
关于网站域名变更的通知
查看: 299|回复: 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]中的应用实例。8 {4 k) d9 W# q

    3 g* [" J" _0 F$ G$ e) ^1 SQLite数据库的介绍与选择
    5 p/ w. ?8 Q2 P+ p( E8 J3 v* ?+ S9 K& g: q) \
    1.1 SQLite数据库结构9 O  W% B) e- V4 \% d& g& q
    ; C; A& \3 F* W7 }" }) ?
    SQLite数据库结构图如图1所示。) r5 N7 m$ Q* ]" `" @6 f& b# K4 G

    2 z" P: f+ P( e9 N6 P  O- n/ V! Q5 K$ Q! r. P
    1.2 SQlite数据库的特点
    SQLite是一个开源的嵌入式关系数据库,结构紧凑,可靠性强[3]。有以下特点:- @5 r" X- i8 m5 H' K
    + m9 [' j! I* E2 L4 g
    (1)使用非常简单。只需要掌握3个核心API函数,大多数的SQL[4]语句都可以使用。
    ! |5 I7 ]" R% ^  l! X. a1 ^: a# E8 v0 }- J6 m; e# c
    (2)占用很少的存储器空间。SQLite完全独立,数据库引擎和应用程序在同一系统进程中,因此运行速度较高。
    4 e# q# \- h& u' Z" N; {
    " s& U- N; i* Y! i2 A* |(3)支持ACID事务,在系统出现问题或电源断电时不会出现数据丢失现象。
    / t: o5 y! n6 G* G0 O1 G4 X
    + h" Q  m2 v: }. T  D& S8 ]9 E(4)支持多种语言,像C/C++/C#等。! w5 ^* M$ y6 Y" j. A+ x# A
    # c" o6 r# D5 R
    (5)支持多个嵌入式操作系统平台,如Linux系统、Wince系统等。
    ) w) \- G% R1 P# o: s7 \' i/ p7 P# s% _+ u( Z( e# @
    2 SQlite的选择* H, s# Z; N1 a; G9 A8 Y
    # V: Y6 w, x2 \2 M# t7 w2 g
    首先,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中运行。' D4 x' s; t2 M& L8 [! V
    2 w: h5 {  u+ U5 a4 I
    3 SQLite的应用硬件及软件平台
      P+ K) }- k$ l+ ]8 ^- i  f+ q6 ~% W1 X! K, D5 i. u, C
    本文探讨中以S3C2440作为处理器ARM9的硬件平台,以Wince6.0为应用系统,支持.NET2.0平台。在Visual Studio 2008软件平台中用 C#中编写程序,但是在新建项目中选择智能设备时要选择.NET2.0平台。在Visual Studio 2008中用C#编写程序时,第一次使用时要添加引用System.Data.SQLite,在程序中添加using指令集,这样可以通过软件编写程序实现建库建表的功能。
    % }" l- s8 C/ V: B' E. T
    2 e  P3 N) x! w; W8 L' M. I4 SQLite在Wince中的应用实例# Y- O- n; v. n0 H
    & Y2 u+ u9 I/ M/ V
    4.1 Wince中显示数据的控件DataGrid及其属性% c1 p" _9 b( U, j. K

    / |. K) A6 h( Z7 qDataGrid控件实际上是一个固定的列集合,每一列的行数都是不确定的,可以看作一个用来显示数据的网格。它的网格是看不见的,只有建立了数据表,才能看到其中每一行和每一列的具体内容,如果一个单元格的文本太长,就不能在单元格中全部显示。但是在Wince系统中显示数据的控件只有这一个,所以不能完全显示数据这一问题正是本设计所要解决的。图2显示了DataGrid在Wince中的属性。! {2 R! R9 b- Y5 V: r* j

    : S9 r: W9 }6 R% T" E
    ; X: O7 B% b2 C: s- }4.2 SQLite建数据库的步骤
    1 D) _! t1 h9 Y' j- K3 f3 l' o& G2 m! V
    SQLite建数据库的步骤如下:
    ; R1 P: m! Q9 G
    . ~/ M+ x% M, U% N8 b$ T(1)通过SQLiteConnection对数据库进行连接[6],通过软件建数据库,首先要有数据源,如:
    5 J, C7 ?/ Y8 Y# j9 v
    4 W2 d3 @1 [5 i% VSQLiteConnection conn=new SQLiteConnection("Data Source=\\Program Files\\ maindata.db");
    & \: r' p: p& E0 ~- X' L4 j$ A! {8 R- O/ Q
    对数据库要进行操作需要执行的命令,如SQLiteCommand cmd=new SQLiteCommand();& o% b1 U+ n5 {5 E5 U

    & |. o4 h2 A( S! w(2)每次使用数据库前需要打开数据库,还需要连接数据库,关闭数据库;
    , I& [8 l! X/ \  I& V! ?9 T$ m% ]! G( N0 B: o2 P
    (3)通过 CREATE TABLE SQL语句进行建表。必须给表注上表名,方便下面操作。如:$ K2 B! x8 l7 Y+ F6 P( p1 V
    {cmd.CommandText="CREATETABLE ServerLert(Numintrger,BedNum varchar(20),ServerItem varchar(50),ServerTime varchar(30),Passwords varchar(30));"
    + t6 Q' n/ w! H6 ~! \' p3 \0 C* x$ U/ O
    (4)可以通过INSERT INTO 语句进行插入数据。如:8 ~6 E$ A4 e5 G' o
    cmd.CommandText="INSERT INTO ServerLert(Num,BedNum,ServerItem,ServerTime) VALUES(1 ,′2′,′测血糖′,′10-12-10 15:50:00′)";, u$ ]" ^( p- `# S5 G. o4 E" J2 v
      h& p% q, d7 r( X8 |7 s! V
    (5)数据库至此建成,由于插入的时间单元格不能完全显示,因此需要通过对图2中标注有灰色背景的TableStyles进行设置[7]。如:
    $ u2 w  \. n8 X& S" l4 iDataGridTableStyle dgts=new DataGridTableStyle();
    ( \2 ]4 L8 ?; I) @dgts.MappingName=ds.Tables[0].TableName;; j! @' W$ V  s
    DataGridTextBoxColumn dgtbc=new DataGridTextBoxColumn();/ Y0 h. G, |6 Y- m- m; s3 I; c
    dgtbc.HeaderText=ds.Tables[0].Columns[0].ColumnName;/ y9 M. t6 u: z1 p+ o0 F) G
    dgtbc.MappingName=ds.Tables[0].Columns[0].ColumnName;# m$ b9 M/ R( t- g; t* l, w' I6 U
    dgtbc.Width=70;
    % L! h  z* a% S6 K* ]/ @) Bdgts.GridColumnStyles.Add(dgtbc);
    ' J4 i: k  o$ c8 f6 _+ \; X  [2 l$ e. l! T# e6 U
    上面是对表中第一列进行的宽度设置主要是对DataGridTableStyle中列的格式进行设置,这就解决了显示文本过长的问题。第二列设置80,第三列设置了170,在Wince中运行的结果。如图3所示。" v& n$ L6 @, Q. p! \3 t: t

    . K+ _+ A) k: S& c9 S
    ; Y9 T4 W+ X/ q  q4.3 Wince通过DataGrid属性建数据库的分析
    ' F" [  e5 ^$ a+ U2 g* \& s. a" w' O
    . Q( E% v8 H* S+ d2 L! z$ zDataGrid在应用于基于Wince的Windows mobile[7]智能设备时,主要针对DataGridTableStyle属性进行设置[8]。根据应用于Windows mobile的原理对基于Wince的ARM9的嵌入式设备中建数据库还是行不通。对其列的属性进行操作设置仍然改变不了列的宽度,所以这种路径行不通。试了很多种方法,最后通过软件编程进行设置,得到了图3的结果。比较DataGridTableStyl进行设置与软件设置发现,问题在于表的MappingName与列的MappingName设置时,必须对应才能实现修改功能。用DataGridTableStyle设置,如果列的MappingName与数据库中的建表的列不对应,则映射不存在,从而找不到网格去显示数据,更无法对数据的列宽进行操作。所以通过软件编程,可以对建在缓存区域中的每一张表中所有的列进行操作,解决文本过长不能完全显示的问题。0 _6 @) g4 x: n- g% ?) w- `$ F8 ?8 V" [

    ( @5 b9 \( @! {2 Y2 z0 w7 I6 [通过上面的介绍可以看出,SQLite作为开源的嵌入式数据库应用在Wince中的一个优点就是建表比较简单,不像SQL CE数据库[9],在Wince运行中需要先创建表,把所建的数据库放在Wince的系统中,添加数据源时再去绑定这个数据源。对于在.net2.0平台建立的数据库[10],添加数据源时无法找到路径,所以这种方法不可行。通过SQLite软件创建数据库的方法则可以改善上述不足。SQLite作为一款小巧的嵌入式数据库,发展前景很大,在基于ARM的Wince操作系统有着广泛应用[11]。
    : C( a7 [! Y: ]. ^
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-25 00:45 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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