找回密码
 注册
关于网站域名变更的通知
查看: 270|回复: 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]中的应用实例。' c8 ~! x2 P% m7 |2 g) p

    ) Y2 c# o) P6 U0 q1 SQLite数据库的介绍与选择
    ! }1 D$ p/ t2 P" F2 m& o! [9 D0 G% d  w  H
    1.1 SQLite数据库结构  ]) h) t  [, o$ Y" U! Q
      j" p9 R% e5 r) b9 J- R
    SQLite数据库结构图如图1所示。+ m4 w5 g- P, s

    . A' W3 O9 e- q3 c; i) [# x6 T6 R  e7 _# G/ u1 X0 b2 i( @$ `
    1.2 SQlite数据库的特点
    SQLite是一个开源的嵌入式关系数据库,结构紧凑,可靠性强[3]。有以下特点:, f$ O6 \( v) x" c
    - v) R- o" C6 e; R3 ~+ |
    (1)使用非常简单。只需要掌握3个核心API函数,大多数的SQL[4]语句都可以使用。$ p! W% I! r0 g- w8 H
    / @* n% _. l+ k  `
    (2)占用很少的存储器空间。SQLite完全独立,数据库引擎和应用程序在同一系统进程中,因此运行速度较高。
    ! n- }0 x8 }1 x$ u: ^' V6 J( y
    9 l4 |" w. e$ D! X' \(3)支持ACID事务,在系统出现问题或电源断电时不会出现数据丢失现象。
    : a, M- Q* T( L7 N" Q% @3 I8 A/ G
    7 h$ k: F% d9 ^5 y(4)支持多种语言,像C/C++/C#等。
    4 ?2 `0 I. s+ _
    & E4 Z3 |- C) }& s, S! ?(5)支持多个嵌入式操作系统平台,如Linux系统、Wince系统等。: ^. ^( ~& @1 F4 v7 x1 Q7 z  `

    4 ~. }9 E! u6 Q' b8 c/ y2 SQlite的选择
    % m- l, ~; z: n: V7 [  l, X4 L4 ^
    & G4 g  ]" \8 r  W- O首先,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中运行。; F+ X! v+ D1 ]/ C' v' w

    4 c% ]+ x! z( ^& l# C; A3 SQLite的应用硬件及软件平台) w. R  I" Q- \1 F* ~5 R6 J, Q

    1 C$ Q& `3 D5 Z' K8 t( t1 s  B本文探讨中以S3C2440作为处理器ARM9的硬件平台,以Wince6.0为应用系统,支持.NET2.0平台。在Visual Studio 2008软件平台中用 C#中编写程序,但是在新建项目中选择智能设备时要选择.NET2.0平台。在Visual Studio 2008中用C#编写程序时,第一次使用时要添加引用System.Data.SQLite,在程序中添加using指令集,这样可以通过软件编写程序实现建库建表的功能。$ M+ X7 q$ {/ A/ `! l

    ; w; ]3 [$ e5 P# I2 d% c4 SQLite在Wince中的应用实例
      Z+ G, [' X6 W  R1 K
    " v9 u# b. b/ {0 }4 g; ^! l4.1 Wince中显示数据的控件DataGrid及其属性' c# M0 b- g8 G* z8 D
    3 d+ O4 t- C0 Y: ?+ u4 V5 v. \
    DataGrid控件实际上是一个固定的列集合,每一列的行数都是不确定的,可以看作一个用来显示数据的网格。它的网格是看不见的,只有建立了数据表,才能看到其中每一行和每一列的具体内容,如果一个单元格的文本太长,就不能在单元格中全部显示。但是在Wince系统中显示数据的控件只有这一个,所以不能完全显示数据这一问题正是本设计所要解决的。图2显示了DataGrid在Wince中的属性。
      r0 E  T: j! m# d5 }- S  K4 p9 H8 u) a2 `5 V! z5 g! Y
    ' d, P$ d) c# w- N
    4.2 SQLite建数据库的步骤: B- h6 @/ c0 E5 M" p
    0 D# Z" ]- O2 E/ K$ T4 G5 V' _( z
    SQLite建数据库的步骤如下:7 i. p2 R+ @. L- D# M& p0 D' h
    & I% n  R- E  C, h& `: L, {
    (1)通过SQLiteConnection对数据库进行连接[6],通过软件建数据库,首先要有数据源,如:
    0 z( r3 \0 o, i' U0 z8 m" g4 @2 J2 f, p9 l/ I4 A* z( X( C
    SQLiteConnection conn=new SQLiteConnection("Data Source=\\Program Files\\ maindata.db");
    : l0 I. w5 N( b! x7 {% B/ R+ s2 d6 B9 O+ p) o, c
    对数据库要进行操作需要执行的命令,如SQLiteCommand cmd=new SQLiteCommand();
    ! ~8 V+ h2 I" g: v
    ( Y+ p# @6 ]- j% }. x$ p(2)每次使用数据库前需要打开数据库,还需要连接数据库,关闭数据库;- c0 \+ O, _6 \; C. V& i0 Z
    2 L# l1 h% T+ X( z; i/ K* U
    (3)通过 CREATE TABLE SQL语句进行建表。必须给表注上表名,方便下面操作。如:
    % y8 Q- K& b0 \. }{cmd.CommandText="CREATETABLE ServerLert(Numintrger,BedNum varchar(20),ServerItem varchar(50),ServerTime varchar(30),Passwords varchar(30));"& I. `# j8 n9 O, w
    - V9 i( c0 ^( W+ @/ e$ O( P4 P
    (4)可以通过INSERT INTO 语句进行插入数据。如:
    & I$ X& j1 p6 \0 Qcmd.CommandText="INSERT INTO ServerLert(Num,BedNum,ServerItem,ServerTime) VALUES(1 ,′2′,′测血糖′,′10-12-10 15:50:00′)";% c* ]9 E5 K6 I3 j' r, M2 m
    ( }" d8 I, I+ R% B
    (5)数据库至此建成,由于插入的时间单元格不能完全显示,因此需要通过对图2中标注有灰色背景的TableStyles进行设置[7]。如:) L3 q' {4 T9 `9 S% U3 h; s
    DataGridTableStyle dgts=new DataGridTableStyle();& p& e  q3 ^( U" \* {" x5 p. F! L8 ~9 N
    dgts.MappingName=ds.Tables[0].TableName;
    5 X" ]9 N- x% n3 R. {4 E( s, vDataGridTextBoxColumn dgtbc=new DataGridTextBoxColumn();& b/ e1 U5 ?# \5 x6 K% l
    dgtbc.HeaderText=ds.Tables[0].Columns[0].ColumnName;* {) U3 r5 C# F& x- h$ l1 Y
    dgtbc.MappingName=ds.Tables[0].Columns[0].ColumnName;* O' q6 {3 X. ]9 b
    dgtbc.Width=70;
    ) ^) @- S8 Y" [1 s4 x: ]* M0 udgts.GridColumnStyles.Add(dgtbc);
    - c( P$ G# O7 c- z5 a6 H1 O! Y
    ' [8 O$ r! F* R# \& c6 T' e- X# H上面是对表中第一列进行的宽度设置主要是对DataGridTableStyle中列的格式进行设置,这就解决了显示文本过长的问题。第二列设置80,第三列设置了170,在Wince中运行的结果。如图3所示。7 p: J8 P- z, n! h  B" |# h# n" C

    " W1 B6 v# i8 @, P' I' h
    # i8 p  o5 ?. ?6 e8 o4.3 Wince通过DataGrid属性建数据库的分析
    . M! u4 P3 y6 a. O/ f0 R# `- M. \( d. P5 f, |3 |
    DataGrid在应用于基于Wince的Windows mobile[7]智能设备时,主要针对DataGridTableStyle属性进行设置[8]。根据应用于Windows mobile的原理对基于Wince的ARM9的嵌入式设备中建数据库还是行不通。对其列的属性进行操作设置仍然改变不了列的宽度,所以这种路径行不通。试了很多种方法,最后通过软件编程进行设置,得到了图3的结果。比较DataGridTableStyl进行设置与软件设置发现,问题在于表的MappingName与列的MappingName设置时,必须对应才能实现修改功能。用DataGridTableStyle设置,如果列的MappingName与数据库中的建表的列不对应,则映射不存在,从而找不到网格去显示数据,更无法对数据的列宽进行操作。所以通过软件编程,可以对建在缓存区域中的每一张表中所有的列进行操作,解决文本过长不能完全显示的问题。
    3 b4 Q/ G5 S( E& }" ?5 P/ I1 G% l$ V3 N; B+ y( g) N
    通过上面的介绍可以看出,SQLite作为开源的嵌入式数据库应用在Wince中的一个优点就是建表比较简单,不像SQL CE数据库[9],在Wince运行中需要先创建表,把所建的数据库放在Wince的系统中,添加数据源时再去绑定这个数据源。对于在.net2.0平台建立的数据库[10],添加数据源时无法找到路径,所以这种方法不可行。通过SQLite软件创建数据库的方法则可以改善上述不足。SQLite作为一款小巧的嵌入式数据库,发展前景很大,在基于ARM的Wince操作系统有着广泛应用[11]。
    9 S( K3 q6 c) [, j* t
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-21 11:32 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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