TA的每日心情 | 开心 2019-11-19 15:19 |
|---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
随着科学技术的发展,嵌入式系统成为了科技发展的主要领域, Linus和Wince是比较常见的嵌入式系统。嵌入式开发过程离不开数据库的应用,对于嵌入式数据库的选择是必要的。通常,嵌入式系统选择的数据应该尽量小,SQLite[1]在Linux中的应用很广泛,本设计介绍了SQLite作为一款小巧的嵌入式数据库在Wince[2]中的应用实例。
: r' F, W5 ^. U. z- D
/ w9 t+ S, j! E% J3 Q; q. s1 SQLite数据库的介绍与选择' I; a! M3 q: M; C2 O4 C* i& p
: H, y8 f1 E+ K. @- N# K" d$ p
1.1 SQLite数据库结构6 U( }' }" Q* V0 ^ e. C7 a
& E( b) G0 j, VSQLite数据库结构图如图1所示。+ g' K& T) y2 c1 a" U# ]* y. H
![]()
( K, x. C8 r; K& i- w# q% V2 R5 f. S6 C
1.2 SQlite数据库的特点 SQLite是一个开源的嵌入式关系数据库,结构紧凑,可靠性强[3]。有以下特点:6 r' x, \) B6 I5 `5 \. g$ O! F# c
6 {- }" |" f( b+ @1 o(1)使用非常简单。只需要掌握3个核心API函数,大多数的SQL[4]语句都可以使用。
; P" Q1 Y0 O8 A
. k) K% d& O" B! ~' ?(2)占用很少的存储器空间。SQLite完全独立,数据库引擎和应用程序在同一系统进程中,因此运行速度较高。
2 @0 Z( ~9 b# ~, i7 L
% l4 I) e+ N# R! I: C* `(3)支持ACID事务,在系统出现问题或电源断电时不会出现数据丢失现象。$ e* Z6 ^- e {
) }# v5 z6 T8 P* `(4)支持多种语言,像C/C++/C#等。
4 H- j9 M) }2 P' s+ O G2 f7 c7 k+ k3 x" p o! g
(5)支持多个嵌入式操作系统平台,如Linux系统、Wince系统等。3 n9 J) }* T9 r) W
7 V2 D# D5 a' y$ l3 o1 f
2 SQlite的选择
7 _& U x0 v$ q
5 l* i& o( X4 @, U首先,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中运行。$ `5 k, N: T/ c! J& T
& |% g, H- r0 x! k! A3 SQLite的应用硬件及软件平台
! _2 P" l, E, i, `. p0 J* Z1 J9 j4 ?3 a# S Z
本文探讨中以S3C2440作为处理器ARM9的硬件平台,以Wince6.0为应用系统,支持.NET2.0平台。在Visual Studio 2008软件平台中用 C#中编写程序,但是在新建项目中选择智能设备时要选择.NET2.0平台。在Visual Studio 2008中用C#编写程序时,第一次使用时要添加引用System.Data.SQLite,在程序中添加using指令集,这样可以通过软件编写程序实现建库建表的功能。
/ I, J4 O6 c3 f0 V5 {/ i9 @6 ~. Y" v) F# D
4 SQLite在Wince中的应用实例
, c' t- r& Q) B6 ^) V8 W: \7 G) N8 Z- a! H1 M: p ?
4.1 Wince中显示数据的控件DataGrid及其属性
0 o- _; t) c: l
6 p5 d$ [, y4 c0 nDataGrid控件实际上是一个固定的列集合,每一列的行数都是不确定的,可以看作一个用来显示数据的网格。它的网格是看不见的,只有建立了数据表,才能看到其中每一行和每一列的具体内容,如果一个单元格的文本太长,就不能在单元格中全部显示。但是在Wince系统中显示数据的控件只有这一个,所以不能完全显示数据这一问题正是本设计所要解决的。图2显示了DataGrid在Wince中的属性。
3 }! P* Q) T/ U% f % I/ B* N; O7 Z/ s5 u' f$ }
" z' c3 k6 u, G# l) Q/ |) b% m, a4.2 SQLite建数据库的步骤/ A- }# ^! o) n
, f; Y W3 J5 \4 B, ?6 x
SQLite建数据库的步骤如下:
5 |/ L+ p' R- Y) i F; ]# t1 n& S* D' m. ]; a
(1)通过SQLiteConnection对数据库进行连接[6],通过软件建数据库,首先要有数据源,如:; a3 D& Q- q1 G2 p$ Y
0 G4 g: H$ a- [' O# D# U5 \SQLiteConnection conn=new SQLiteConnection("Data Source=\\Program Files\\ maindata.db");
8 N2 Q4 [' @' h9 n9 Z7 B- `; V; }9 |# q; A$ c2 e
对数据库要进行操作需要执行的命令,如SQLiteCommand cmd=new SQLiteCommand();
8 Q+ g3 d6 z) ?. _8 Y ^$ v) P# o2 ~' w8 S" b+ R
(2)每次使用数据库前需要打开数据库,还需要连接数据库,关闭数据库;0 J1 k3 }6 m& i* n8 x" d. w3 n
2 @% ?* o* X, `8 p5 |7 R
(3)通过 CREATE TABLE SQL语句进行建表。必须给表注上表名,方便下面操作。如:: V) n5 D: Y. O
{cmd.CommandText="CREATETABLE ServerLert(Numintrger,BedNum varchar(20),ServerItem varchar(50),ServerTime varchar(30),Passwords varchar(30));") O7 W" y6 e& @7 A7 H; m; a; r. ^
2 o( x3 N, j# [6 a; u; }& I(4)可以通过INSERT INTO 语句进行插入数据。如:0 O6 y( k* | l- m: {
cmd.CommandText="INSERT INTO ServerLert(Num,BedNum,ServerItem,ServerTime) VALUES(1 ,′2′,′测血糖′,′10-12-10 15:50:00′)";
0 T/ T7 F2 E) _4 \, m: q! ]* V. ^. k1 Q, o/ B( h
(5)数据库至此建成,由于插入的时间单元格不能完全显示,因此需要通过对图2中标注有灰色背景的TableStyles进行设置[7]。如:( y8 a& i, u: U1 N( k9 z! D! \# w
DataGridTableStyle dgts=new DataGridTableStyle();
* E+ H9 e! C8 cdgts.MappingName=ds.Tables[0].TableName;
, L4 c6 c/ l$ M$ b; qDataGridTextBoxColumn dgtbc=new DataGridTextBoxColumn();9 L! w" N8 o( _ N
dgtbc.HeaderText=ds.Tables[0].Columns[0].ColumnName;
: P/ @- x" L3 T' Q; Xdgtbc.MappingName=ds.Tables[0].Columns[0].ColumnName;/ r% d" O, k$ x, Z' n! ?) `
dgtbc.Width=70;9 I6 U% Z) ]4 l/ }- @* |
dgts.GridColumnStyles.Add(dgtbc);
5 g9 F+ Q1 v# `; {
$ F9 s k2 Q' z4 N+ T" T) A上面是对表中第一列进行的宽度设置主要是对DataGridTableStyle中列的格式进行设置,这就解决了显示文本过长的问题。第二列设置80,第三列设置了170,在Wince中运行的结果。如图3所示。
9 F1 e- r& {7 s5 Z6 ?' Y![]()
( o8 p/ M7 G+ O/ ]' p: A
; u3 V# W) R5 W" p/ g" V4.3 Wince通过DataGrid属性建数据库的分析
4 W0 H9 T3 S9 U, F, ~6 x! S( [2 o- Z q. F# o' i
DataGrid在应用于基于Wince的Windows mobile[7]智能设备时,主要针对DataGridTableStyle属性进行设置[8]。根据应用于Windows mobile的原理对基于Wince的ARM9的嵌入式设备中建数据库还是行不通。对其列的属性进行操作设置仍然改变不了列的宽度,所以这种路径行不通。试了很多种方法,最后通过软件编程进行设置,得到了图3的结果。比较DataGridTableStyl进行设置与软件设置发现,问题在于表的MappingName与列的MappingName设置时,必须对应才能实现修改功能。用DataGridTableStyle设置,如果列的MappingName与数据库中的建表的列不对应,则映射不存在,从而找不到网格去显示数据,更无法对数据的列宽进行操作。所以通过软件编程,可以对建在缓存区域中的每一张表中所有的列进行操作,解决文本过长不能完全显示的问题。
) X0 P0 o) g; J) t: g k* s; _+ ], }. T/ G" U2 o
通过上面的介绍可以看出,SQLite作为开源的嵌入式数据库应用在Wince中的一个优点就是建表比较简单,不像SQL CE数据库[9],在Wince运行中需要先创建表,把所建的数据库放在Wince的系统中,添加数据源时再去绑定这个数据源。对于在.net2.0平台建立的数据库[10],添加数据源时无法找到路径,所以这种方法不可行。通过SQLite软件创建数据库的方法则可以改善上述不足。SQLite作为一款小巧的嵌入式数据库,发展前景很大,在基于ARM的Wince操作系统有着广泛应用[11]。 1 u+ ~3 u& k2 J2 k5 i1 ]
|
|