找回密码
 注册
关于网站域名变更的通知
查看: 296|回复: 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]中的应用实例。1 S; q9 D0 y1 P/ e8 ]
    2 P% u8 z! H* C! D$ ?& B2 Z# F( g$ @
    1 SQLite数据库的介绍与选择
    6 L/ e- b& L' Y, {9 N) t" J
    4 }. u! d% X2 N8 M6 c3 Z1.1 SQLite数据库结构5 L3 Z! d/ P1 u

    9 ^2 }9 l2 B9 j' i6 C8 M3 s, _. BSQLite数据库结构图如图1所示。9 G! u7 S5 V/ e
    . u) |8 I6 \9 n2 r$ b) g4 {0 }

    & O; x# f4 h5 u* D2 ]; l! Z& _- r; p. P1.2 SQlite数据库的特点
    SQLite是一个开源的嵌入式关系数据库,结构紧凑,可靠性强[3]。有以下特点:
    + f. L4 ]9 t1 _$ x
    0 g9 r! B; J0 ^6 c& V2 W(1)使用非常简单。只需要掌握3个核心API函数,大多数的SQL[4]语句都可以使用。) B" ?0 J8 G) a4 _" P5 v( T

      z% k1 Z* P8 @  I1 c(2)占用很少的存储器空间。SQLite完全独立,数据库引擎和应用程序在同一系统进程中,因此运行速度较高。
    8 P& C  o4 S8 ]4 Z: v
    8 |9 w1 V0 h3 G6 f; w! n& d  Y- T: `(3)支持ACID事务,在系统出现问题或电源断电时不会出现数据丢失现象。& ]! F# }1 ]+ E3 Q! n
    % b8 i' b9 [2 o$ O% t- v- r# j
    (4)支持多种语言,像C/C++/C#等。0 q# G6 O! x$ f
    8 I  n& f" E" M( ?2 Z8 d6 M
    (5)支持多个嵌入式操作系统平台,如Linux系统、Wince系统等。
    " L( Y- X3 m0 I9 g* e8 N0 I4 k8 g
    2 SQlite的选择
    5 D) K& B; U8 l0 F8 [- S( |6 R3 p$ Q6 z1 y6 e
    首先,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中运行。
    ! r" ~* a0 U( f& j& A2 }" M! z& w/ m* I
    3 SQLite的应用硬件及软件平台' w1 u! t8 A3 F( e' o# o

    ' G" B% L- Z. L, X6 s& |本文探讨中以S3C2440作为处理器ARM9的硬件平台,以Wince6.0为应用系统,支持.NET2.0平台。在Visual Studio 2008软件平台中用 C#中编写程序,但是在新建项目中选择智能设备时要选择.NET2.0平台。在Visual Studio 2008中用C#编写程序时,第一次使用时要添加引用System.Data.SQLite,在程序中添加using指令集,这样可以通过软件编写程序实现建库建表的功能。
    / W/ I& X" u$ q7 y0 _1 X' d
    ) j. f* O0 Q* Y! O  N4 SQLite在Wince中的应用实例% ?, u# T% L' y" A8 ~# f. X

    6 U6 x# c0 [+ r# d5 |1 S) F9 w4.1 Wince中显示数据的控件DataGrid及其属性/ q3 N( l7 U4 K+ `5 K. `' J. S

    " M( }; y! [' G6 @DataGrid控件实际上是一个固定的列集合,每一列的行数都是不确定的,可以看作一个用来显示数据的网格。它的网格是看不见的,只有建立了数据表,才能看到其中每一行和每一列的具体内容,如果一个单元格的文本太长,就不能在单元格中全部显示。但是在Wince系统中显示数据的控件只有这一个,所以不能完全显示数据这一问题正是本设计所要解决的。图2显示了DataGrid在Wince中的属性。: B3 p( G- t7 v9 r; G. B8 t
    & }8 m- V+ [: [& {$ k! L
    ! S7 C& @  Z9 Z' h. \
    4.2 SQLite建数据库的步骤
      p$ @* [5 W2 m4 E( [6 R4 _' M' t1 }5 D% Q2 f$ y
    SQLite建数据库的步骤如下:
    : o7 ?  d' q1 K- K
    5 _2 Z% ~2 R1 [  X' m(1)通过SQLiteConnection对数据库进行连接[6],通过软件建数据库,首先要有数据源,如:. j' A' k+ ~5 @7 ]1 w! y

    ! ]& l5 I, _* _SQLiteConnection conn=new SQLiteConnection("Data Source=\\Program Files\\ maindata.db");8 D0 }8 s3 @' n0 k# h) v
    6 v2 ]; i' S8 s$ i- D
    对数据库要进行操作需要执行的命令,如SQLiteCommand cmd=new SQLiteCommand();
    ; H$ E9 n0 l& P8 B$ Q4 P8 m# u6 Q: F9 ^* t0 V. M5 b
    (2)每次使用数据库前需要打开数据库,还需要连接数据库,关闭数据库;5 O2 K6 c; ]$ I2 J, ~, {' Q

      u/ B0 d# `/ t# `+ `(3)通过 CREATE TABLE SQL语句进行建表。必须给表注上表名,方便下面操作。如:3 A0 \% V+ v; f& p' O
    {cmd.CommandText="CREATETABLE ServerLert(Numintrger,BedNum varchar(20),ServerItem varchar(50),ServerTime varchar(30),Passwords varchar(30));"2 _" n1 V# ^/ [* r8 T
    % ^) s. O  |6 ~3 ]0 Q- O9 Y) M
    (4)可以通过INSERT INTO 语句进行插入数据。如:
    8 Z) t+ o; O- t8 G% o5 U$ v. g7 n% ^cmd.CommandText="INSERT INTO ServerLert(Num,BedNum,ServerItem,ServerTime) VALUES(1 ,′2′,′测血糖′,′10-12-10 15:50:00′)";
    3 |4 k  E, U  p; g( S# e$ R- ]) t9 h5 J
    (5)数据库至此建成,由于插入的时间单元格不能完全显示,因此需要通过对图2中标注有灰色背景的TableStyles进行设置[7]。如:
    . c) o4 C! J4 u2 WDataGridTableStyle dgts=new DataGridTableStyle();# h- ^6 g! S/ W# o
    dgts.MappingName=ds.Tables[0].TableName;
    / Z0 d1 v" I8 p# L- `6 U3 G3 EDataGridTextBoxColumn dgtbc=new DataGridTextBoxColumn();3 g4 s& `0 }; Z6 r8 B  _# w
    dgtbc.HeaderText=ds.Tables[0].Columns[0].ColumnName;
    + O$ y% ~& j* N9 W6 l, edgtbc.MappingName=ds.Tables[0].Columns[0].ColumnName;
    ' ?; k- _3 }: m7 o; cdgtbc.Width=70;
    . Z  `1 J6 v/ g" n1 J# w; x2 i" Ndgts.GridColumnStyles.Add(dgtbc);2 M4 R1 ]2 o- Z" Y! Z! V% T' B
    * D( N! ]2 w7 @3 ~
    上面是对表中第一列进行的宽度设置主要是对DataGridTableStyle中列的格式进行设置,这就解决了显示文本过长的问题。第二列设置80,第三列设置了170,在Wince中运行的结果。如图3所示。
    0 c8 ^1 f: |8 w! h
    9 d! _+ W) k. a5 L* d, I6 g  `$ Y
    : N$ d2 g: D  x4.3 Wince通过DataGrid属性建数据库的分析
    ) O; k4 r# z5 O/ e( `' m5 `8 X: d- i+ `$ X5 p4 I( N
    DataGrid在应用于基于Wince的Windows mobile[7]智能设备时,主要针对DataGridTableStyle属性进行设置[8]。根据应用于Windows mobile的原理对基于Wince的ARM9的嵌入式设备中建数据库还是行不通。对其列的属性进行操作设置仍然改变不了列的宽度,所以这种路径行不通。试了很多种方法,最后通过软件编程进行设置,得到了图3的结果。比较DataGridTableStyl进行设置与软件设置发现,问题在于表的MappingName与列的MappingName设置时,必须对应才能实现修改功能。用DataGridTableStyle设置,如果列的MappingName与数据库中的建表的列不对应,则映射不存在,从而找不到网格去显示数据,更无法对数据的列宽进行操作。所以通过软件编程,可以对建在缓存区域中的每一张表中所有的列进行操作,解决文本过长不能完全显示的问题。
    . v  z% `& ]% f! v0 x1 G7 L- b) `4 E+ _
    通过上面的介绍可以看出,SQLite作为开源的嵌入式数据库应用在Wince中的一个优点就是建表比较简单,不像SQL CE数据库[9],在Wince运行中需要先创建表,把所建的数据库放在Wince的系统中,添加数据源时再去绑定这个数据源。对于在.net2.0平台建立的数据库[10],添加数据源时无法找到路径,所以这种方法不可行。通过SQLite软件创建数据库的方法则可以改善上述不足。SQLite作为一款小巧的嵌入式数据库,发展前景很大,在基于ARM的Wince操作系统有着广泛应用[11]。
    + K/ _, n# B+ [3 R, U
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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