当前位置:文档之家› LabVIEW访问SQLite数据库接口研究

LabVIEW访问SQLite数据库接口研究

LabVIEW访问SQLite数据库接口研究
LabVIEW访问SQLite数据库接口研究

LabVIEW访问SQLite数据库接口研究

【摘要】本文介绍了LabVIEW环境下利用API技术访问开源数据库SQLite的方法,实现了可跨平台操作的数据库。采用此种方法完成了对过程控制中历史数据的保存、数据分析等数据库访问管理,并取得了较好的效果。

【关键字】LabVIEW SQLite 数据库Vxworks 跨平台数据库

利用LabVIEW开发应用软件时经常需要对数据库访问,尤其是在过程控制中要大量保存历史数据。通过数据库访问技术,用户可以方便的创建一个使用数据库来管理大量数据,存储过程数据并且能够分析过程结果的自动控制系统。但是LabVIEW本身并不具备数据库访问功能。据作者所知,目前常见的解决这个问题的工具包都是利用LabVIEW的ActiveX 功能,把调用Microsoft ADO控件,和SQL语言对数据库的访问进行了不同程度封装。使得即使不了解Microsoft ADO控件以及SQL语言也可以操作数据库。

由于这些工具包都是基于ADO控件的,而ADO是Windows系统的一个数据库访问控件,只能运行在Windows平台上,并不支持跨平台应用。作者近来在做的一个项目用的是Vxworks的系统环境,现有的数据库工具包不在适用。在这里我们引入了SQLite数据库。

1. SQLite数据库简介

SQLite第一个Alpha版本诞生于2000年5月。

SQLite是一款轻型的开源数据库、遵守ACID的关

联式数据库管理系统,它的设计目标是嵌入式的,

而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix/Vxworks等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。更多介绍可访问其官方网站https://www.doczj.com/doc/3e8065906.html,

1.1SQLite数据库特性

a.零配置:不用安装和管理配置。并且独立,不需要额外依赖,只要有一个编译好的动态

库文件即可。

b.存储在单一文件中的完整数据库,而且不受不同操作系统字节顺序的影响;数据库转移

不需要格式转换。

c.支持SQL语言,数据库操作简单,方便程序移植。

d.数据库可以很大,最大可以到2TB。虽然不可能会用的那么大。起码没有以前遇到的2GB

的限制。

e.提供完整的API应用。使用简单。提供源代码,可以根据需要重编译应用于其他平台。

2. 通过LabVIEW对SQLite数据库访问操作

SQLite数据库提供了完成的API接口,我们这里通过LabVIEW的API接口功能(调用库函数节点)来实现对SQLite数据库的操作。这里我们需要一个已编译的动态链接库。由于SQLite是开源的,其源代码可以通过https://www.doczj.com/doc/3e8065906.html,上去下载,并根据运行目标编译不同的动态链接库。这里需要强调的是由于我们的开发平台是Windows系统,需要同时编一个可用于Windows系统的动态链接库DLL。以便开发使用和调试。

2.1SQLite数据的基本操作流程

图1:SQLite数据库操作基本步骤

3、一次完成的SQLite数据库操作包括1、打开(没有为自动新建)数据库;--->2、编译SQL 语句。由于SQLite不能直接执行SQL指令,需要将SQL指令编译成字节码。3、执行操作

4、获取执行结果;

5、销毁SQL指令字节码;

6、关闭数据库。

2.2新建(或者打开已有)数据库

A、打开(新建)数据库

打开数据库用到的是sqlite3_open()。函数原型如下:

int sqlite3_open(

const char *filename, /* Database filename (UTF-8) */

sqlite3 **ppDb /* OUT: SQLite db handle */

);

用这个函数开始数据库操作。

需要传入的参数是数据库文件的完整路径,比如:c:\Test_Database.db。

注:文件名不需要一定存在,如果此文件不存在,SQLite会自动建立它。如果它存在,就尝试把它当数据库文件来打开。

sqlite3 ** 返回的是数据库的操作句柄(引用),是一个32位有符号整型数据。

函数返回值表示操作是否正确,如果返回SQLITE_OK(0)则表示操作正常。

图2:LabVIEW中打开数据库节点

2.3执行SQL语句

在SQLite中提供一些已封装的函数供直接执行SQL语句,如sqlite3_exec()、sqlite3_get_table()。这里我们主要介绍SQLite的SQL执行过程,对于SQLite中已封装的函数请参考相关说明,这里不再阐述。

通过图1所示,我们可以看到SQLite执行一条SQL语句需要三个步骤,与之相关的函数包括:sqlite3_prepare(),sqlite3_step(),sqlite3_finalize。下面我们详细看一下这几个函数的作用和用法。

2.3.1.SQL语句声明(编译)

SQLite中并不能直接识别SQL语句,在执行SQL操作前需要先将SQL语句编译成SQLite可识别的二进制字节码,SQLite提供了sqlite3_prepare()函数来执行SQL语句的编译。

sqlite3_prepare()函数原型为:

int sqlite3_prepare(

sqlite3 *db, /* Database handle */

const char *zSql, /* SQL statement, UTF-8 encoded */

int nByte, /* Maximum length of zSql in bytes. */

sqlite3_stmt **ppStmt, /* OUT: Statement handle */

const char **pzTail /* OUT: Pointer to unused portion of zSql */

);

函数返回的stmt就是已编译的二进制字节码,提供给后续的操作函数。

图3:LabVIEW中编译SQL语句节点

?sqlite3_prepare 接口把一条SQL语句编译成字节码留给后面的执行函数。使用该接口访问数据库是当前比较好的的一种方法。注:输入的参数中只有第一个SQL语句会被编译

2.3.2.执行SQL语句

在SQL声明准备好之后, 需要调用sqlite3_step()来执行:

sqlite3_step()函数原型

int sqlite3_step(sqlite3_stmt*);

图4:LabVIEW中执行SQL语句节点

在这里需要注意的是成功执行完sqlite3_step()后并不会返回SQLITE_OK(0)。在执行INSERT、UPDATE、CREATE TABLE、DROP TABLE、DELETE等数据库操作时,如果SQL 语句执行成功或者正常sqlite3_step() 函数将返回SQLITE_DONE(101),否则将返回错误代码。在执行SELETE操作时,如果SQL返回了查询结果,sqlite3_step() 函数将返回SQLITE_ROW(100)。

?注:如果SQL语言是SELETE操作,每执行一次sqlite3_step() 函数,只能返回一条查询结果,如果要获取多条查询结果,则需要多次执行sqlite3_step() 函数。

如果函数的返回值是SQLITE_ROW(100), 那么下边的这些方法可以用来获得记录集行中的数据:

sqlite3_column_count()函数返回结果集中包含的列数。

sqlite3_column_decltype() 则用来返回该列在CREATE TABLE 语句中声明的类型。

sqlite3_column_name() 返回第N列的字段名。

sqlite3_column_bytes() 用来返回UTF-8 编码的BLOBs列的字节数或者TEXT字符串的字节数。

sqlite3_column_text() 返回UTF-8 编码的TEXT 数据。

?不一定非要按照sqlite3_column_type()接口返回的数据类型来获取数据. 数据类型不同时软件将自动转换.

2.3.3.结束SQL语句

在数据库关闭之前,所有准备好的声明都必须被释放销毁。在执行了sqlite3_prepare()函数之后,任何时候都可以通过调用sqlite3_finalize() 将一个准备好的SQL声明销毁。

sqlite3_finalize()函数原型:

int sqlite3_finalize(sqlite3_stmt*);

图5:LabVIEW中结束SQL语句节点

2.4关闭数据库

用sqlite3_close()关闭已打开的数据库,释放资源。

sqlite3_close()函数原型:

int sqlite3_close(sqlite3 *);

图6:LabVIEW中关闭SQLite数据库节点

3. 在LabVIEW中完成一次数据库完成操作实例

图7:LabVIEW中创建数据表实例

LabVIEW与数据库的链接

第 17章 LabVIEW与数据库的链接 17.1 Database Connectivity 工具包介绍 NI为LabVIEW用户提供了一个专门和数据库链接的工具 包:Database Connectivity。安装好工具包后,Database Connectivity工具包的VI将会在函数选板的附加工具包列中出 现。Database子选板如图17-1所示。 DB Tools Open Connection:打开数据库连接,如图17-2(a) 所示。 DB Tools Close Connection:关闭数据库连接,如图17-2(b) 所示。 图17-2(a) DB Tools Open Connection 图17-2(b) DB Tools Close Connection DB Tools Insert Data:根据数据库连接插入一列新的数据,如图17-3(a)所示。 DB Tools Select Data:根据数据库连接从数据库中提取一列数据,如图17-3(b)所示。 图17-3(a) DB Tools Insert Data 图17-3(b) DB Tools Select Data 图17-1 Database子选板

DB Tools Create Table:根据数据库连接创建一个新的表格。输入参数表格和行信息分别表示表格的名称和表格中每行的属性,如图17-4(a)所示。 DB Tools Drop Table:根据数据库连接删除一个由输入参数表格指定名称的表格,如图17-4(b)所示。 图17-4(a) DB Tools Create Table 图17-4(b) DB Tools Drop Table Database Variant To Data:将数据库变量转换为由输入参数类型指定的LabVIEW数据类型,如图17-5所示。 Utility子选板比较常用的函数有DB Tools List Tables.vi与DB Tools List Columns.vi。在这里只介绍这两个VI,其他的VI查看该工具包的帮助文件,很容易就可以理解函数的用法,如图17-6所示。 图17-5 Database Variant To Data 图17-6 Utility子选板 DB Tools List Tables:根据数据连接返回数据库中的所有表格,如图17-7(a)所示。 DB Tools List Columns:根据数据库连接返回输入参数表格的所有列,如图17-7(b)所示。 图17-7(a) DB Tools List Tables 图17-7(b) DB Tools List Columns 对Advanced子选板也只介绍比较常用的VI,其他的VI在应用中不会经常涉及到,这里不再赘述,如图17-8所示。

sqlite3数据库使用实例

SQLite version 3.7.9 2011-11-01 00:52:41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table students( ...> id integer primary key, ...> name text not null unique, ...> sex int default 1, ...> bak text); sqlite> .tables students sqlite> .help .backup ?DB? FILE Backup DB (default "main") to FILE .bail ON|OFF Stop after hitting an error. Default OFF .databases List names and files of attached databases .dump ?TABLE? ... Dump the database in an SQL text format If TABLE specified, only dump tables matching LIKE pattern TABLE. .echo ON|OFF Turn command echo on or off .exit Exit this program .explain ?ON|OFF? Turn output mode suitable for EXPLAIN on or off. With no args, it turns EXPLAIN on. .header(s) ON|OFF Turn display of headers on or off .help Show this message .import FILE TABLE Import data from FILE into TABLE .indices ?TABLE? Show names of all indices If TABLE specified, only show indices for tables matching LIKE pattern TABLE. .load FILE ?ENTRY? Load an extension library .log FILE|off Turn logging on or off. FILE can be stderr/stdout .mode MODE ?TABLE? Set output mode where MODE is one of: csv Comma-separated values column Left-aligned columns. (See .width) html HTML

code insert SQL insert statements for TABLE line One value per line list Values delimited by .separator string tabs Tab-separated values tcl TCL list elements .nullvalue STRING Print STRING in place of NULL values .output FILENAME Send output to FILENAME .output stdout Send output to the screen .prompt MAIN CONTINUE Replace the standard prompts .quit Exit this program .read FILENAME Execute SQL in FILENAME

浅谈嵌入式SQLITE数据库实现与应用

开源(Opensource):这是它最强大的地方。开源,意味着你可以品读它的源码,你可以随时修改它,加入你自己的特性,而这一切完全免费的。开源,是一种精神。 实现部分 好了,现在从实现的角度来谈谈个人体会,这也是我比较关注的。 SQLite是一款优秀的嵌入式数据库管理系统,这里有两层含义:一是它经常作为动态库嵌入到应用程序; 另外一方面它通常用于嵌入式设备或其它要求较低的桌面应用。如果把它作为内存数据库,个人觉得不是很适合。毕竟,它的写并发性不是很好,此时,TimesTen也许会更好,Berkey DB也许是一个不错的选择。SQLite这样的嵌入式数据库与主存数据库的应用场景、实现以及对资源的需求都是不一样的。 (1)事务处理 事务的核心问题有两个:并发控制和恢复。解决了并发控制和恢复问题的系统,就能允许它的用户假设程序是原子的(atomically)执行的——好像没有其它的程序同时执行;而且是可靠的(reliably)——不会产生失败。原子性和可靠性的抽象,则称为事务(transaction)。其实,事务并不是DBMS的专利,任何分布式系统,都面对并发和恢复问题,而解决的方法就是事务,只不过,我们更常听到DBMS中的事务。 并发控制保证事务的原子执行,它使得交错执行的事务看起来是一个接一个的顺序执行的,完全没有交错执行。如果交错执行的结果与顺序执行的结果一致,则称为串行化(serializable)。 恢复使得数据库仅仅包含那些正常完成的事务的结果。如果事务在执行的过程中发生错误,不能继续进行,恢复算法必须清除部分完成事务产生的影响。 ?并发控制 SQLite只支持库级锁,库级锁意味着什么?——意味着同时只能允许一个写操作,也就是说,即事务T1在A表插入一条数据,事务T2在B表中插入一条数据,这两个操作不能同时进行,即使你的机器有100个CPU,也无法同时进行,而只能顺序进行。表级都不能并行,更别说元组级了——这就是库级锁。但是,SQLite尽量延迟申请X锁,直到数据块真正写盘时才申请X锁,这是非常巧妙而有效的。 ?恢复 SQLite的恢复技术是影子分页技术(shadow paging)技术的典型代表。 DBMS的常用恢复技术有影子分页技术与基于日志的技术,前者在早其数据库管理系统中用到,比如Sys tem R,现代DBMS中已经很难见到它的身影了。 影子分页技术与基于日志技术相比,优点是实现简单,消除了写日志记录的开销,恢复的速度也快(不需要redo和undo)。影子分页的缺点就是事务提交时要输出多个块,这使得提交的开销很大,而且以块为单位,很难应用到允许多个事务并发执行的情况——这是它致命的缺点。 (2)查询处理 SQLite的查询处理本质上就是一个SQL编译器和一个虚拟机。而实现这些功能只用了十多个文件,整个实现实现简单而有效,但是也存在一些问题。首先,SQLite字典数据很简单,实际上它的字典就一个表s qlite_mater,所有的信息都是通过对sqlite_master中SQL语句进行解析获取的,而解析一个SQL语句,都需要进行词法分析、语法分析、甚至虚拟机代码的生成。而这一过程是很需要时间的,而且,查询计划也没有重用。其次,查询优化还比较简单,特别是连接操作,只通过循环来做(MySQL也一样)。但是,仅仅数万代码,我们不能对它要求太苛求。 (3)存储模型

Qt4访问sqlite数据库

目录 Qt4访问sqlite数据库 (2) RedHat 9 Linux下在QT3.1中连接SQLite3全过程详细记录 (6) 基于ARM-Linux的SQLite嵌入式数据库技术 (17) 关于在qt中如何连接sqlite3数据库的问题 (23) SQLite 完整中文FAQ (32) C/C++中调用SQLITE3的基本步骤 (40) SQLite嵌入式数据库系统的研究与实现 (50)

Qt4访问sqlite数据库 https://www.doczj.com/doc/3e8065906.html,/index.php/2008/09/qt-sqlite/ sqlite简介 sqlite 是一款轻量级的、基于文件的嵌入式数据库,2000年就已经诞生,经过7年多的发展,直到今天已经成为最流行的嵌入式数据库,包括google在内的公司在其桌面软件中亦使用sqlite 存储用户数据。由此可以看出,已经没有任何理由去怀疑sqlite的稳定性了。 sqlite的优势 1. 免配置,和access一样,只要把数据库文件通过ftp上传到服务器上就可以使用,不需要服务器的额外支持 2. 备份方便,因为只是一个文件,只要复制一份该文件,就能备份整个数据库 3. 虽然是轻量级数据库,但他支持最大2tb 的单个库文件。 4. 快,无与伦比的快。经过实际测试,在几百万记录的情况下,sqlite的插入和查询速度和mysql 不分上下,快于sql server,10倍于access (但这并不意味着它可以替代sql server ) 用QT操作sqlite 由于sqlite属于轻量级的数据库,不需要配置,不需要安装,也不需要管理员,所以也就没必要像操作mysql等数据库一样的设置主机,用户和密码了。样例如下: 1 2 3 4 5 6 7 8 9 10 11 12 #include #include #include #include #include #include

在LABVIEW中实现对数据库表格的操作

在LABVIEW中实现对数据库表格的操作 摘要: 利用LabVIEW 数据库工具包只能操作而不能创建数据库,所以必须借助第三方数据库管理系统,比如Access,来创建数据库。本文试图通过LABVIEW对数据库进行操作,在LABVIEW 中建立学生成绩查询系统。 关键词: 引言: 现今,数据库技术已经发展的比较成熟了,著名的数据库管理系统有SQL Server、Oracle、 DB2、Sybase ASE、Visual ForPro、Microsoft Access等。Microsoft Access是在 Windows 环 境下非常流行的桌面型数据库管理系统,它作为 Microsoft office组件之一,安装和使用都非常方便,并且支持 SQL 语言,所以本文将基于 Access 来介绍LABVIEW在数据库中的的操作。 在利用NI公司的附加工具包中的数据库接口工具包LabVIEW SQL Toolkit进行数据库访问。该工具包集成了一系列的高级功能模块,这些模块封装了大多数的数据库操作和一些高级的数据库访问功能。它的优点是易于理解,操作简单,用户可以不学习SQL语法。 LabVIEW SQL Toolkit(又被称作为LabVIEW Database Connectivity Toolset)是用于数据库访问的附加工具包,它集成了一系列的高级功能模块,这些模块封装了大多数的数据库操作和一些高级的数据库访问功能[10]。其主要的功能如下: (1)支持ADO所支持的所有的数据库引擎; (2)支持所有与ODBC或OLE DB兼容的数据库驱动程序; (3)具有高度的可移植性,在任何情况下,用户通过改变DB Tools Open Connection VI的输入参数Connection String就可以更换数据库; (4)可以将数据库中Column Values的数据类型转换为标准LabVIEW Database Connectivity Toolset的数据类型,这进一步增强了它的可移植性; (5)与SQL兼容; (6)不使用SQL语句就可以实现数据库记录的查询、添加、修改以及删除等操作; (7)用户可以完全不需要学习SQL语法。 下面具体介绍如何在LABVIEW中利用LabVIEW Database Connectivity Toolset对数据库进行操作。 正文: 1.1建立数据源 实现数据库功能的第一步便是建立数据源,下面将详述整个过程。 1.1.1在ACCESS中建立一个数据库

嵌入式系统技术报告(题目 SQLITE数据库的概述和使用)

合肥学院 嵌入式系统设计课程 技术报告 (2014-2015第2学期) 报告题目:SQLite数据库概述和使用专业:自动化 班级:级自动化卓越班 姓名: 指导老师:干开峰

摘要 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也变的非常庞大,并占用相当多的系统资源。嵌入式数据库直接在应用程序进程中运行,提供了零配置运行模式,并且资源占用非常少。作为一个开源的嵌入式数据库产品,SQLite具有系统开销小,检索效率高的特性,嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的API去实现对数据的存取操作。更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件。嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式,而后者是引擎响应式。嵌入式数据库的一个很重要的特点是体积非常小,同时,很多嵌入式数据库在性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影。SQLite是D·理查德·希普开发出来的用一个小型C库实现的一种强有力的嵌入式关系数据库管理体制。SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库。 关键词:SQLite;嵌入式;数据库

目录 1SQLite简介 (1) 2SQLite工作原理 (1) 3SQLite的功能特性 (2) 4SQLite的结构 (2) 5SQLite的使用 (4) 5.1SQLite里面的一些基本的操作: (4) 5.2SQLite的一些类的使用及说明: (5) 5.3SQLite嵌入式数据库使用注意: (10) 6总结 (11)

sqlite命令

Sqlite命令操作 建立数据库档案 用sqlite3建立数据库的方法很简单,只要在shell下键入(以下$符号为shell 提示号,请勿键入): $ sqlite3 foo.db 如果目录下没有foo.db,sqlite3就会建立这个数据库。sqlite3并没有强制数据库档名要怎么取,如果你喜欢,也可以取个foo.icannameitwhateverilike 的档名。 在sqlite3提示列下操作 进入了sqlite3之后,会看到以下文字: SQLite version 3.1.3 Enter ".help" for instructions sqlite> 这时如果使用.help可以取得求助,.quit则是离开(请注意:不是quit) SQL的指令格式 所以的SQL指令都是以分号(;)结尾的。如果遇到两个减号(--)则代表注解,sqlite3会略过去。 建立资料表 假设我们要建一个名叫film的资料表,只要键入以下指令就可以了:

create table film(title, length, year, starring); 这样我们就建立了一个名叫film的资料表,里面有name、length、year、starring 四个字段。 这个create table指令的语法为: create table table_name(field1, field2, field3, ...); table_name是资料表的名称,fieldx则是字段的名字。sqlite3与许多SQL数据库软件不同的是,它不在乎字段属于哪一种资料型态:sqlite3的字段可以储存任何东西:文字、数字、大量文字(blub),它会在适时自动转换。 建立索引 如果资料表有相当多的资料,我们便会建立索引来加快速度。好比说: create index film_title_index on film(title); 意思是针对film资料表的name字段,建立一个名叫film_name_index的索引。这个指令的语法为 create index index_name on table_name(field_to_be_indexed); 一旦建立了索引,sqlite3会在针对该字段作查询时,自动使用该索引。这一切的操作都是在幕后自动发生的,无须使用者特别指令。 加入一笔资料 接下来我们要加入资料了,加入的方法为使用insert into指令,语法为:insert into table_name values(data1, data2, data3, ...); 例如我们可以加入

基于WEB的数据库访问技术

基于WEB的数据库访问技术 【摘要】基于WEB的数据库访问技术,在各具体业务应用与底层用户数据库间建立一种可扩展、可移植,具有较强伸缩性的统一的对外接口,以有效地支撑业务网络应用。 【关键词】WEB;数据库访问技术 1.引言 在三层C/S中应用程序访问数据库服务器都需要一定的数据访问技术的支持。从总体上数据访问技术可以分为数据访问接口和数据访问对象两部分,两者之间的关系如图1所示。 图1 数据访问技术关系图 数据访问接口:提供一组标准化接口(数据库引擎),允许应用程序访问不同类型的数据库管理系统。如ODBC,JDBC,OLE DB等;数据访问对象:提供用于通过数据库访问接口访问数据库管理系统的通用标准对象,不受应用程序开发语言的限制,实现对数据库的连接、增加、删除和查询等操作。如常见的有DAO,RDO,ADO,https://www.doczj.com/doc/3e8065906.html,等对象模型。在数据访问技术研究初期,不同的数据库厂商都会提供不同的数据访问接口,开发人员需要针对不同的数据库管理系统(DBMS)学习不同的专用数据库访问技术,比如DB2系统的CLI Library、Oracle 的OCI Library等。这对开发人员造成了极大的困惑,使得数据库应用程序的开发很困难,影响开发进度;而且所开发的应用程序局限性很大,严重依赖于数据库平台,不利于应用程序的跨数据库平台移植。 2.通用基于WEB数据库访问技术 信息化时代,网络和信息管理高速发展,数据库技术日臻成熟,功能日趋完善,而网络和数据库之间的关联与应用日益紧密,用户对信息的要求随之也要达到高标准的实时性与交互性,因此WEB服务器与数据库技术的结合显得格外重要。数据库访问中间件技术出现一改传统两层结构,采取C/S三层结构,充分发挥了WEB技术和数据库技术二者结合的综合优势与潜力,提高了性能、访问效率和安全性。常见的基于WEB的数据库访问技术分为以下几种: 2.1 CGI技术 CGI即通用网关接口,是Web服务器与应用程序交互传递信息的一种标准接口。CGI的工作原理是客户端浏览器通过URL向Web服务器提出请求,服务器的守护进程将此请求传给相应CGI程序进行处理,然后CGI将处理结果返回客户端浏览器。CGI优点:通用性强,基本支持所有HTTP服务器,交互能力强,跨平台性能极佳,操作简单灵活。CGI缺点:应用程序通常独立执行,客户共享

LabVIEW中向Excel写入数据

LabVIEW中向Excel写入数据 这里只讨论通过Activex的方法,因为只有这种方法,才能完全发挥Excel的所有强大的功能。 首先,Labview是有一些自带的关于Excel编程的例子的。在find example里search一下,有挺多的,其中有一个叫write table to XL.vi,我最早就是跟着它学的。学了不少,也被误导了很久,其实也不能算误导,只是以前没花时间去研究。最近在用Labview写一个类似ERP一样的软件,接触很多Excel表格,花了些功夫在Excel VBA上,也算比以前有了更多的认识了。 先来看看write table to XL这个程序:这个程序的目的就是把一个2维数组(表格)里的内容写到excel里。 从上图看,步骤大致是这样的,先打开excel,再打开一个workbook,然后打开worksheet,这实际上跟咱们使用excel的过程是一样的。打开worksheet 以后,它还定义了行与列的header,最后才把table里的数据写到excel里。那个cell value子vi,我是从开始就用它,也像这个例子一样,每次写都是套俩for loop,然后往excel里边猛写。最近我才发现,原来有其他的方法,可以一次性写一个二维数组进去,非常快。其实想想也是,不至于会那么傻了。不过也怪VBA里太多的属性和方法,不容易找。 前边的打开excel workbook和worksheet我就不说了,例子里就有,可以新建一个workbook和sheet,也可以打开现有的,这个在excelexample.llb里都

能找到。(excelexample在哪里?这个……,打开这些个VI,saveas一下就知道在哪里了,ok?) 接下来说一下这几天找到的几个方法和属性。首先是Insert,插入行或者列(就像你在excel里右键插入一样,每次只能一行或者一列,要多行的话,只能多来几次了,是这样吧?)在说这个之前,先说下怎么找这些属性和方法,在Excel里,打开VB编辑器(工具-》宏-》VB 编辑器,excel2007是在菜单开发工具下,我用的是Excel2007),打开以后看VB语言参考,重点就是里边的方法和属性,对应在Labview里边的Property和Method节点。help 里可以搜索,输入insert,可以看到很多,没办法,不熟悉只能一个一个看咯。看到range.insert方法以后,去和Labview的比对一下。

SQLite 数据库文件分析

SQLite数据库文件分析 前言 性急的兄弟可以跳过前言直接看第1章,特别性急的兄弟可以跳过前面各章,直接看鸣谢。最近对SQLite数据库很感兴趣,认真地学了有半个多月了,越学越觉着好玩。好玩归好玩,只是目前没什么实际用途,那就写点儿东西吧,否则半个月不是白学了嘛! SQLite数据库包括多方面的知识,比如VDBE什么的。据说那些东西会经常变。确实,我用的是3.6.18版,我看跟其它文档中描述的3.3.6的VDBE已经很不一样了。所以决定先写文件格式,只要是3.?.?的版本,文件格式应该不会有太大变化吧。 网上介绍SQLite文件格式的文章并不少,但一般都是针对小文件:一个表,几条记录,两个页。本文准备一直分析到比较大的文件,至少B-tree和B+tree中得有内结点(就是说不能只有一个既是根又是叶的结点,就是说表中得多点记录,得建索引),还要争取对SQLite 的各类页都做出分析。 在分析的过程中,争取把SQLite数据库关于文件格式的基本规定也都介绍一下。这样,本文既是一个综合性的技术文档,又带有实例说明,兄弟们参考时岂不是就很方便了吗?既然是技术文档,要想读懂总得先掌握点SQLite数据库的基本知识吧。所以,先介绍参考文献。 0.1 参考文献 1-The Definitive Guide to SQLite . Michael Owens:据说是比较经典的SQLite著作,我看写得是挺好的。边看边翻译了其中的主要部分,但不敢拿出来,大家还是看原文吧。 2-SQLite源代码:其实有关SQLite的最原始说明可能都在源代码中了。把此项列在第2,只是因为我是先看的书再看的代码,估计大家也会是这个顺序吧。先浏览一下代码还是很有收获的,特别是几个主要的.h文件,对本文的写作很有帮助。有关文件格式的说明主要在btreeInt.h中。 3-SQLite入门与分析:网上Arrowcat的系列文章。Arrowcat应该是一个很博学的人,看他的文章收获很大,在此也算是鸣谢吧。 4-SQLite . Chris Newman:我没看,因为也是网上能够下载到的重要资源,所以也在此列出。看目录内容应该比参考文献1简单一些,但出版日期也更早了一些。 5-NULL:在网上搜了半天,国内为什么就没有关于SQLite的好书呢? 6- https://www.doczj.com/doc/3e8065906.html,/fileformat.html:如果这篇文章看懂了,其实我这篇东西根本就不用再看了。这是介绍SQLite文件格式的权威文档,列在最后,是因为我也是写完这篇东西后才看到的。该文档由SQLite官方网站提供,当初没看,一是因为上网少,还没仔细浏览人家的网站就开始干了(太激动),其实归根结蒂还是因为英语不好。看到此文档这后还敢把我的东西发出来,有两个原因:一、为其他英语比我强不了多少的兄弟提供一点方便,二、我这里有例子,看起来更形象一些吧。

SQLite数据库中如何列出所有的表和索引

SQLite数据库中如何列出所有的表和索引 如果你运行sqlite3命令行来访问你的数据库,可以键入“.tables”来获得所有表的列表。或者,你可以输入“.schema” 来看整个数据库模式,包括所有的表的索引。输入这些命令,后面跟一个LIKE模式匹配可以限制显示的表。 在一个C/C++ 程序中(或者脚本语言使用Tcl/Ruby/Perl/Python 等)你可以在一个特殊的名叫SQLITE_MASTER上执行一个SELECT查询以获得所有表的索引。每一个SQLite 数据库都有一个叫SQLITE_MASTER 的表,它定义数据库的模式。 SQLITE_MASTER 表看起来如下: CREATE TABLE sqlite_master ( type TEXT, name TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT ); 对于表来说,type字段永远是'table',name字段永远是表的名字。所以,要获得数据库中所有表的列表,使用下列SELECT语句: SELECT name FROM sqlite_master WHERE type='table' ORDER BY name; 对于索引,type等于'index', name则是索引的名字,tbl_name是该索引所属的表的名字。不管是表还是索引,sql字段是原先用CREATE TABLE 或CREATE INDEX 语句创建它们时的命令文本。对于自动创建的索引(用来实现PRIMARY KEY 或UNIQUE 约束),sql字段为NULL。 SQLITE_MASTER 表是只读的。不能对它使用UPDATE、INSERT 或DELETE。它会被CREATE TABLE、CREATE INDEX、DROP TABLE 和DROP INDEX 命令自动更新。临时表不会出现在SQLITE_MASTER 表中。临时表及其索引和触发器存放在另外一个叫SQLITE_TEMP_MASTER 的表中。SQLITE_TEMP_MASTER 跟SQLITE_MASTER 差不多,但它只是对于创建那些临时表的应用可见。如果要获得所有表的列表,不管是永久的还是临时的,可以使用类似下面的命令:SELECT name FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE type='table' ORDER BY name

浅谈SQLite

浅谈SQLite:实现与应用 1、前言 有一些日子没有仔细关注SQLite了,今天打开其主页,发现其最新的版本已经是3.6.22了,更让我惊喜的是它的用户越来越多,而且邮件列表的关注者也越来越多,突然觉得自己已经太old了。惊喜的同时,不得不聊上几句了。 首先,来看看都有哪些人在使用SQLite,主页上列举一长串NB的用户,其中不乏像Adobe,Apple,Firefox,甚至连google,Microsoft,SUN这样的用户。 Firefox:这是我的机器上V3.5.7安装目录下的文件: 可以发现用的SQLite 3.6.16.1。 据说,Google在它的Desktop for Mac,Google Gears,以及Android,甚至Chrome 中都用到SQLite,而且,Google的工程师对SQLite的全文检索功能作了很大的贡献(contribution)。还有Apple,Micorsoft,SUN等等,这里就不列举了。详细见 https://www.doczj.com/doc/3e8065906.html,/famous.html。有这些公司的参与,对SQLite的发展应该有很大的帮助,尤其是像Google这样的用户。 2、实现与应用 下面从实现及应用的角度来谈谈SQLite,先看看SQLite的特点(功能)吧。 特点

简单(simple):SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS:一个头文件,一个动态库文件,你就拥有了关系数据库的所有功能了。简单,是SQLite最明显的哲学。它提供的API少而简单。只需要一个DLL文件,你的程序马上就拥有了一个功能强大的数据库引擎,这是一件很美妙的事。 小巧(small):我用VS 2005在Windows下编译的3.6.11,Release版为368K,用时不到20秒——而编译MySQL时,要花上几分钟。而当我插入10000条int数据时,内存开销660K,磁盘开销92K。 事务(transaction):事务是现代商业数据处理系统最基本的要求,而Access,不论是在可执行文件大小(看了一下Access2003的可执行文件大小为6.32M,两者不是一个量级),还是事务特性,都是不能和SQLite 相比的。 并发性(Concurrency):由于SQLite通过OS的文件锁来实现库级锁,粒度很大,但是,它通过一些复杂特殊的处理(具体可以参见分析系列),尽量的提升了读写的并发度。如果你还有担心,你可以看看这篇文章: https://www.doczj.com/doc/3e8065906.html,/database/sqlite_cms.html。 SQL92:SQLite支持绝大部分的标准SQL语句,你只需要几百K的空间,就可以换来需要上百兆的通用DBMS几乎所有操作了。 方便(Convenience):如果你的程序要使用SQLite,只需要将拷贝你的程序目录即可。 开源(Opensource):这是它最强大的地方。开源,意味着你可以品读它的源码,你可以随时修改它,加入你自己的特性,而这一切完全免费的。开源,是一种精神。 实现部分 好了,现在从实现的角度来谈谈个人体会,这也是我比较关注的。 SQLite是一款优秀的嵌入式数据库管理系统,这里有两层含义:一是它经常作为动态库嵌入到应用程序;另外一方面它通常用于嵌入式设备或其它要求较低的桌面应用。如果把它作为内存数据库,个人觉得不是很适合。毕竟,它的写并发性不是很好,此时,TimesTen

labview与大数据库

17.2 Database Connectivity应用典型实例 17.2.1 在Access中建立一个数据库 使用NI所提供的数据库工具包Database Connectivity只能操作数据库,但是无法创建数据库,因此需要借助第三方数据库管理系统,如Access等来创建数据库。首先我们建立一个Data.mdb的数据库文件。 打开Microsoft Access软件,单击文件>>新建…,选择空数据库,保存到文件夹下。创建方法如图17-11所示。 图17-11 在Access中创建数据库表格 在利用Database Connectivity工具包操作数据库之前,需要先连接数据库,连接数据库的方法有以下两种。 1.利用DSN连接数据库

LabVIEW数据库工具包基于ODBC(Open Database Connectivity)技术,在使用ODBC API函数之前,需要提供数据源名DSN(Data Source Names)才能连接到实际数据库,所以需要首先创建DSN。Database Connectivity工具包与ODBC的关系如图17-12所示。 打开Windows控制面板>>管理工具,选择数据源,进入“ODBC数据源管理器”对话框,如图17-13所示。 图17-12 DB Tools与ODBC的关系图17-13 “ODBC数据源管理器”对话框 在“用户DSN”页面下创建的数据源只有本用户才能访问,在“系统DSN”页面下创建的数据源,该系统下的所有用户都可以访问。在此选择“用户DSN”,单击

“添加”按钮,在弹出的“创建新数据源”对话框中选择 “Driver do Microsoft Access(*mdb)”,然后单击“完成”按钮,如图17-14所示。 随后弹出“ODBC Microsoft Access安装”对话框,输入“数据源名”,如“LSData”,然后单击“选择”按钮,选择建立好的Data.mdb数据库文件,单击“确定”按钮,如图17-15所示。 图17-14 “创建新数据源”对话框 图17-15 “ODBC Microsoft Access安装”对话框 完成以上配置后,就可以在“用户DSN”页面下看到新创建的名为LSData的DSN了。单击“确定”按钮可完成DSN的建立。

QSQLite 数据库

这里我们只是演示了一下使用这个框架完成最简单的程序的过程,只起到抛砖引玉的作用。这个框架很复杂,但是功能也很强大,Qt Creator中自带了几个相关的例子(在帮助中查找Graphics View Examples即可),你可以参考一下。因为篇幅问题,我们就只讲这么多,如果以后有机会,我会推出一个相关的专题来讲述这个框架。 分类:Qt系列教程作者: yafeilinux 日期:四月 30th, 2010. 3,006 views Tags: 2D绘图, creator, qt, yafeilinux, 教程

二十一、Qt数据库(一)简介 本文章原创于https://www.doczj.com/doc/3e8065906.html,转载请注明出处。 从今天开始我们学习Qt数据库编程的内容。 先说明:我们以后使用现在最新的基于Qt 4.6.2的Qt Creator 1.3.1 Windows版本,该版本是2010年2月17日发布的。 数据库几乎是每个较大的软件所必须应用的,而在Qt中也使用QtSql模块实现了对数据库的完美支持。我们在Qt Creator的帮助中查找QtSql Module,其内容如下图: 可以看到这个模块是一组类的集合,使用这个模块我们需要加入头文件#include ,而在工程文件中需要加入一行代码:QT += sql 这里每个类的作用在后面都有简单的介绍,你也可以进入其中查看其详细内容。下面我们先简单的说一下QSqlDatabase类和QSqlQuery类。 QSqlDatabase类实现了数据库连接的操作,现在Qt支持的数据库类型有如下几种: 而现在我们使用的免费的Qt只提供了SQLite和ODBC数据库的驱动(我们可以在Qt Creator 安装目录下的qt\plugins\sqldrivers文件夹下查看),而其他数据库的驱动需要我们自己添加。SQLite是一个小巧的嵌入式数据库,关于它的介绍你可以自己在网上查找。 QSqlQuery类用来执行SQL语句。(关于SQL语句:在我的教程中只会出现很简单的SQL语句,你没有相关知识也可以看懂,但是如果想进行深入学习,就需要自己学习相关知识了。)

深入浅出LabVIEW数据库应用

目录 第1章引言—献给想用数据库而不懂数据库的工程师 (1) 第2章边干边学数据库基础 (2) 2.1 数据库简史 (2) 2.2 建立数据源 (2) 2.2.1 在Access中建立一个数据库 (2) 2.2.2 建立与数据库的连接 (3) 2.2.3 数据库连接的可移植性问题(高级话题) (7) 2.3 数据库基本操作 (8) 2.3.1 创建一个表格 (8) 2.3.2 删除一个表格 (10) 2.3.3 添加一条记录 (10) 2.3.4 查询一条记录 (11) 2.4 数据库高级操作 (12) 2.4.1 在LabVIEW中执行SQL语言案例研究 (12) 2.4.2 用SQL实现数据查询操作 (13) 2.4.3 用SQL实现删除一条记录 (13) 2.4.4 压缩数据库,释放多余空间 (14) 2.4.5 用SQL实现修改数据操作 (15) 2.5 本章总结 (16) 第3章一个完整的数据库工程范例 (17) 3.1 工程项目要求 (17) 3.2 生成可执行文件(*.exe) (18) 3.3 生成安装文件(Installer) (19) 第4章后记 (22)

第1章引言—献给想用数据库而不懂数据库的工程师 曾经在一个产品检测项目中,客户要求:当产品检测不合格时,记下该产品对应的序列号,测试时间和各项测试指标,并能对这些数据进行管理和查询。由于自己没有系统的学习过数据库,所以第一时间想到的解决方案是用文件的方式(也只能把数据存成文件了)。在使用文件进行数据储存与管理时,遇到了一个巨大的问题:如何查询数据?基本的文件IO函数中,并没有提供现成的查询函数,所以必须自己编程实现。实现的过程是先将数据读入内存,然后再根据关键字进行线性查找,线性查找的时间复杂度为O(N),所以当数据量逐渐增大时,这将是一个非常可怕的过程。这个不可逾越的障碍迫使我不得不再次考虑使用数据库。 想到这儿,我立即到天河书城买了两本网上评价为数据库经典的书《数据库系统概念》和《轻松掌握SQL》,回到办公室后立即开始学习起来。陌生的术语,难懂的理论;看了后一章便忘了前一章——非常痛苦但还是硬着头皮坚持到了下班。 这种痛苦再加上越来越近的项目交付日期,使我非常焦躁,心里终于有个声音爆发了出来“我不就是想要实现数据的保存,修改,删除和查询吗?我需要把那众多的数据库类型、复杂的关系模型、抽象的关系代数…都搞懂吗???”实践后的答案是,不需要,一点都不需要。 我放弃了刚买的新书,打开了LabVIEW 数据库工具包的用户手册和范例程序,寻找着我期望的数据保存,修改,删除和查询功能。到下班的时候,Everything goes well,基本掌握了用LabVIEW 数据库工具包进行数据保存,修改,删除和查询的方法。 回想起这段历程,突然有种想与大家一起分享的冲动——不懂数据库的工程师也可以玩转数据库,因为从应用的角度来看,我们的实际需求仅仅是数据的保存、修改、删除和查询,根本不需要去研究复杂的关系模型、抽象的关系代数、艰深的数据库设计…那基本与我们的初始目标南辕北辙。借助LabVIEW 数据库链接工具包(Database Connectivity toolkit)可以站在应用的层次,很方便的操作数据库,实现数据的保存、修改、删除和查询等功能。 “学以致用,边学边用,急用先学,立竿见影”,在后续的章节中,我们先概览一下必需的与数据库相关的基本概念,然后在LabVIEW平台上一边学习,一边实践如何储存、管理和查询数据。

LabVIEW与数据库的连接

LabVIEW与数据库的链接 2011-01-07 11:37:57| 分类: 嵌入式系统| 标签:labview与数据库的链接|字号大中小订阅 17.1 Database Connectivity 工具包介绍 NI为LabVIEW用户提供了一个专门和数据库链接的工具包: Database Connectivity。安装好工具包后, Database Connectivity工具包的VI将会在函数选板的附加工具包列中出现。Database子选板如图17-1所示。DB Tools Open Connection:打开数据库连接,如图17-2(a)所示。 DB Tools Close Connection:关闭数据库连接,如图17-2(b)所示 图17-2(a) DB Tools Open Connection 图17-2(b) DB Tools Close Connection DB Tools Insert Data:根据数据库连接插入一列新的数据,如图17-3(a)所示。 页脚内容1

DB Tools Select Data:根据数据库连接从数据库中提取一列数据,如图17-3(b)所示。 图17-3(a) DB Tools Insert Data 图17-3(b) DB Tools Select Data DB Tools Create Table:根据数据库连接创建一个新的表格。输入参数表格和行信息分别表示表格的名称和表格中每行的属性,如图17-4(a)所示。 DB Tools Drop Table:根据数据库连接删除一个由输入参数表格指定名称的表格,如图17-4(b)所示。 图17-4(a) DB Tools Create Table 图17-4(b) DB Tools Drop Table Database Variant To Data:将数据库变量转换为由输入参数类型指定的LabVIEW数据类型,如图17-5所示。 页脚内容2

相关主题