0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术嵌入式数据库SQLC介绍

英创信息技术 来源:英创信息技术 作者:英创信息技术 2019-11-12 10:29 次阅读

在当前的嵌入式工控产品中,数据库得到了越来越多的应用。通过数据库,可以非常方便地存储和检索数据,极大地提高工作效率。英创公司基于WinCE的ARM9工控主板,提供了两种类型的数据库,供客户的应用程序选择。一种是WinCE自带的数据库,主要面对需要存储的数据量较小,数据结构相对简单的应用,例如系统的动态配置文件,则使用起来非常合适。另一种则是在PC中最流行的SQL数据库,英创ARM9工控主板缺省配置的SQL数据库版本为SQL CE2.0。在表一中,列出了WinCE自带数据库与SQL CE数据库部分功能的对比,用户可以根据自己的需要,选择合适的数据库。关于WinCE自带数据库的操作请参考《EVC高级编程及其应用开发》WinCE基础数据库编程部分。本文主要讲解在eVC开发环境下,以使用ADOCE 3.1为例详细说明开发SQLCE本地数据库的方法。
表一:WinCE自带数据库与SQLCE数据库功能对照表

WinCE自带数据库

SQLCE数据库

开发方式 使用API函数操作 使用SQL语句操作
数据类型 较少(9种) 较多(20种)
与pc端SQL Server数据同步 不支持 支持
更改表字段 不支持 支持

在EVC环境下由于没有提供专门的API函数对SQLCE进行操作,需要通过ADOCE(Active Data Object for Windows CE)组件才能实现对SQLCE数据库的操作。为了方便用户使用SQLCE数据库,利用ADOCE组件技术(ADOCE介绍在附录一中),针对数据库操作中常用的功能,包括创打开数据库、建数据表等,英创提供了一个对SQLCE数据库操作的管理类DBManager,应用程序通过调用该类中提供的API函数,就可以很方便的建立与SQLCE的链接、打开数据库,并可以直接利用SQL语句来对数据库进行建立表、为表添加记录以及查询表中的记录等功能。在eVC环境下通过DBManager类访问SQLCE数据库模型如图1所示。

1、DBManager类及派生类说明
DBManager类主要提供打开数据库、执行SQL语句等方法。其头文件声明如下:
// 函数功能:打开数据库
// 入口参数:lpszFileName表示要打开的数据库名称,为绝对路径加文件名。
// 出口参数:无
// 返 回 值:TRUE:打开数据库成功;FALSE:打开数据库失败

bool OpenDatabase(LPCTSTR lpszDBName);
// 函数功能:执行SQL语句
// 入口参数:lpstrSql为要执行SQL语句的字符串。
// 出口参数:无
// 返 回 值:TRUE:执行SQL语句成功;FALSE:执行SQL语句失败

bool ExecSql(LPCTSTR lpstrSql);
如果想灵活使用DBManager类对数据库操作,必须了解SQL语句,常用SQL语句可以参考附录二中的内容。但是,对于嵌入式工程师来说,有很多用户对SQL语句并不了解,这样,对用户使用数据库提高了门槛。在实际应用中,嵌入式主板的主要任务是把采集工业现场的状态并保存到数据库中,如果想查看分析数据,可以通过WebServer把数据库信息传输到Client端。为了方便不了解SQL语句的用户使用数据库,我们在基类DBManager中提供了几个虚函数,并给出在派生类中实现虚函数的例子。这样,使用API函数就可以实现打开数据库、创建表、插入记录等操作。用户可以根据要保存数据结构修改虚函数就可以满足用户操作数据库的要求,下面以一个实际示例说明使用派来类的方法。
在工业现场,用户常常需要把现场的状态保存起来,例如,把AD采集的数据和开关量保存起来。本文中,以英创的ETA197 AD模块和ETA716 IO模块为例,说明数据库的操作。ETA197、ETA716与嵌入式主板的连接如图2所示。

根据实际情况,我们需要保存的信息有时间、IO输出值、IO输入值、8通道AD采样值,根据我们的需要,我们设计ADDIOData数据结构如下。
struct ADDIOData
{
CString adtime; // 采集信息的时间
UCHAR dout;// IO输出值
UCHAR din;// IO输入值
float Advalue[8];// AD采样值
};
根据此数据结构,我们实现了创建表和插入记录的API函数,函数声明如下:
class ADDataBase : public DBManager
{
public:
// 函数功能:创建表
// 入口参数:tablename表示要创建的表名。
// 出口参数:无
// 返 回 值:TRUE:创建表成功;FALSE:创建表失败

bool CreateTable(LPCTSTR tablename);
// 函数功能:删除表
// 入口参数:tablename表示要删除的表名。
// 出口参数:无
// 返 回 值:TRUE:删除表成功;FALSE:删除表失败

bool DeleteTable(LPCTSTR tablename);
// 函数功能:插入记录
// 入口参数:tablename表示表名,fieldVal为记录值结构体
// 出口参数:无
// 返 回 值:TRUE:插入记录成功;FALSE:插入记录失败

bool InsertRecord(LPCTSTR tablename,ADDIOData fieldVal);
};
2、使用DBManager类及派生类实现创建表、插入记录等操作的顺序为:
(1)打开数据库
(2)创建表
(3)插入记录
ADDataBase dbm;
CString DBFile=_T('\\nandflash\\emtronix.sdf');
CString TableName=_T('ADCollection');
UserInfo test;
dbm.OpenDatabase(DBFile);// 打开数据库,参数为数据库路径名
dbm.CreateTable(TableName);// 创建表
for(i=0;i<6;i++)    // 每秒钟采集一次数据
{
test.dout=0x01<ISA_WriteUchar(EM9260_CS1,0x10,test.dout);// 写716输出端口
ISA_ReadUchar(EM9260_CS1,0x10,&test.din);// 读716输入端口
for (j=0;j<8;j++)
{
getADValue(j,0,&test.Advalue[j]);// 得到8通道AD采样值
}
dbm.InsertRecord(TableName,test);// 向tablename表中插入记录
Sleep(1000);
}
由上例可以看出,使用英创公司提供的DBManager的派生类,不必了解数据库就可以方便地实现数据的存储。
这种操作数据库的方式不是十分灵活,对熟悉数据库的用户,可以使用DBManager类,执行SQL语句,灵活对数据库操作。关于DBManager类,可以参考源码中注释说明。
附录一、ADOCE简介
ADOCE(Active Data Object for Windows CE)技术提供了高层数据库应用软件的访问接口,可在eVC、eVB等高级语言环境中直接使用,ADOCE是一种易用的COM组件,关于COM组件的开发与调用在《ARM9工控板在远程监控中的应用》系列文章中有详细的说明。ADOCE作为开发WinCE数据库应用程度的面向对象的COM接口,其访问数据库是通过访问OLE DB数据提供程序来进行的,并且提供了一种对OLEDB数据提供程序的简单高层访问接口。ADOCE技术简化了OLE DB的操作,在OLE DB的程序中使用了大量的COM接口,而ADOCE则封装了这些接口,所以,ADOCE是一种高层的访问技术。ADOCE的数据存储模型如图1所示:

ADOCE支持Connection、Recordset、Field、Fields、Error对象,但不支持Command对象、Property对象以及Properties collection。下面介绍几个重要的ADOCE对象。
连接对象(Connection)
Connection对象建立一个对象数据源的数据交换环境,ADOCE允许建立对ACCESS数据源和SQLCE数据源的连接。
记录集对象(Recordset)
Recordset对象是ADOCE数据操作的核心,它是查询结果的集合,可以通过这个结果集处理来自数据源的数据,包括修改记录、更新记录、插入和删除记录等。可以通过Recordset的Open方法执行SQL语句,实现数据库的操作。
字段对象(Field)
·字段对象的每条记录都由Fields组成,其中包括名称、数据和值。
·基于ADOCE的WinCE数据库开发程序包括以下基本步骤:
·创建Connection对象
·打开数据源,建立同数据源的连接
·创建Record对象
·将Recordset的连接字符串设置到Connection对象中
·使用SQL命令
·通过Recordset对象完成结果记录集的操作
·终止连接
附录二、SQL语句语法说明
SQL是Structure Query Language结构化查询语言的缩写,通过SQL语句的执行,可以对数据库内容(表及记录)进行修改或查询,因此数据库的操作就是执行SQL语句。下面简要介绍下几个重要的SQL语句。
1、Create Table语句功能是创建表,其语法格式如下:
Create Table 表名称 (字段名称 数据类型 [(字段长度)] [,字段名称 数据类型 [(字段长度)] ,[ PRIMARY KEY | UNIQUE ] ]

例如: CREATE TABLE Products (ProductID int,Name nvarchar(255), PRIMARY KEY (ProductID)
2、Drop Table语句的功能是将一个现存于数据库内的表删除,其所使用的语法与格式如下所示:
Drop Table 表名称
3、Select语句可以对表的记录作查询、统计。由于Select语句使用比较灵活,我们以几个具体的例子讲价Select的用法。
Select 字段名称 [,字段名称] From 表名称
其中,From关键词是设置来源表名称,使用时可以设置使用一个或多个表,而表名称间以逗号分隔。在搜寻结果中取出所需的字段内容,设置的字段名称以逗号分隔,如果要取得表上的所有字段,可直接用“*”表示。
SELECT * FROM Products WHERE ProductID='02'
Where关键词是设置查询记录条件,用以取得所有符合设置条件内容的记录。在条件设置中可以使用 > 、<、=等比较符号,而对于多项条件的判断也可以利用AND,OR等逻辑操作数来连接。
4、插入记录
INSERT INTO 表名[(field1[, field2[, ...]])] VALUES (value1[, value2[, ...]]
例如:INSERT INTO Products (ProductID,Name) VALUES (1,'EM9000嵌入式模块')
5、删除记录
DELETE FROM 表名 WHERE criteria
例如:DELETE FROM 表名 WHERE ProdutcID=01
6、更新记录
UPDATE 表名 SET newvalue WHERE criteria;
例如:Update Products set Name=’EM9161嵌入式主板’ where ProdcutID=01
在eVC环境下,对数据的开发,其实就是通过ADOCE COM组件执行SQL语句的过程。为了使用户方便的使用ADOCE,我们提供了DBManager类,通过此类,可以方便的建立与数据库的连接、执行sql语句等操作。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3440

    浏览量

    87143
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6064

    浏览量

    34613
收藏 人收藏

    评论

    相关推荐

    嵌入式数据库Sqlite在嵌入式工控平板电脑中的使用

    系统内已集成驱动);对于这种嵌入式系统,有它自带的一种数据库,名字叫做sqlite,广泛应用于这种系统终端设备。数据库现有存储容量可以达到8G(支持SD卡扩展),如果终端设备过多,数据
    发表于 12-22 15:22

    嵌入式主板的无线通讯解决方案

    WiFi模块。ETA6210模块继续保持了PPP拨号模式,使得无论是Linux平台的主板还是CE平台的主板,都能方便的使用。  下表列出了当前嵌入式主板支持的无线模块。模块型号模块图片无线信道
    发表于 03-24 14:00

    基于组件的嵌入式移动数据库怎么实现?

    嵌入式技术已在人们生活中得到广泛应用,移动计算更是给人们的生活带来了极大的方便,由移动计算技术推动发展的新的数据库技术让人耳目一新。如
    发表于 10-11 06:44

    嵌入式数据库msql在Linux下有哪些应用?

    嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式
    发表于 10-22 08:13

    怎么解决移动数据库的断接问题?

    本文介绍了位置相关查询优化和数据广播两种普遍用于移动数据库查询的方法,结合移动数据库中的缓存技术,分别从合理分配
    发表于 04-23 06:00

    为什么要选择嵌入式内存数据库引擎?

    嵌入式内存数据库技术发展的现状内存数据库的定义内存数据库的特点面向3G平台嵌入式内存
    发表于 04-27 07:08

    嵌入式实时数据库基本特性是什么?有哪些应用领域?

    嵌入式实时数据库基本特性是什么?嵌入式实时数据库有哪些应用领域?
    发表于 04-27 06:57

    嵌入式数据库有哪些应用实例?

    嵌入式数据库和企业级数据库的区别在哪儿?嵌入式数据库有哪些应用实例?
    发表于 05-12 06:12

    嵌入式移动数据库的关键技术有哪几种?

    嵌入式移动数据库的体系结构由哪几部分构成?嵌入式移动数据库的关键技术有哪几种?
    发表于 05-28 06:58

    嵌入式数据库相关资料下载

    嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式
    发表于 10-27 07:53

    在Spring框架中配置嵌入式数据库引擎

    在本教程中,我们将向您展示一些示例,以在Spring框架中配置嵌入式数据库引擎,例如HSQL,H2和Derby。使用的技术:春天4.1.6.RELEASEjUnit 4.1.2Maven 3
    发表于 10-27 09:02

    嵌入式数据库sqlite移植及使用的资料分享

    嵌入式数据库sqlite移植及使用一、实验目的二.实验内容三.预备知识四.实验设备及工具(包括软件调试工具)五.实验步骤5.1 移植嵌入式数据库 sqlite一、实验目的理解
    发表于 10-28 09:48

    H2数据库介绍

    一、H2数据库介绍  常用的开源数据库有:H2,Derby,HSQLDB,MySQL,PostgreSQL。其中H2和HSQLDB类似,十分适合作为嵌入式
    发表于 12-17 08:03

    跨平台嵌入式数据库EffiProz介绍

    EffiProz:面向.NET程序员的跨平台嵌入式数据库 EffiProz:面向.NET程序员的跨平台嵌入式数据库EffiProz:面向.NET程序员的跨平台
    发表于 12-21 06:00

    嵌入式数据库的作用是什么

    随着嵌入式技术的发展,嵌入式数据库逐步走向应用。本质上,嵌入式数据库是由通用
    发表于 12-21 07:18