数据库高级VI的主要功能

执行SQL语句
从记录集中获取数据
通过DBToolsExecuteQuery执行select语句,将查询结果返回记录集,然后使用DBToolsFetchRecordestData获取记录集中的数据。
bof?如果为TRUE,则光标指向文件开头(BOF)。
BOF定义为记录集中第一个记录之前的位置。
eof?如果为TRUE,则光标指向文件结束(EOF)。
EOF定义为记录集中最后一条记录之后的位置。
如果BOF和文件结束(EOF)同时为TRUE,则记录集中不存在记录,记录集的导航将返回一个错误。
带参数的SQL操作
组合字符串设置参数
有时程序中的SQL语句的条件不是固定值,这个可以用组合字符串的方法解决
带参数的SQL语句
用带参数的SQL语句也可对参数进行设置。
在LabVIEW中,可以使用DBToolsCreateParameterizedQueryVI创建带有参数的SQL语句,使用DBToolsExecuteQueryVI执行带参数的SQL语句。
DBToolsCreateParameterizedQueryVI创建带参数的sql语句时,以?表示需要输入的参数,在parameters中说明SQL参数的名字、数据类型、输入输出性质。
SQL的参数数据类型需要与数据库中的字段的数据类型相同。
创建完带参数的SQL语句,可以通过DBToolsSetParameterValueVI按照参数名字或按顺序指定参数的值。
浏览数据记录
使用SQL语句查询到的数据,以行的方式组成临时记录集,可以通过游标的方式定位临时记录集中的各个记录。
游标在本质上是系统中一个存放临时数据的缓冲区,由指向记录集中数据行的位置信息和临时数据组成,实现从记录集中逐条提取数据记录的功能。
游标允许应用程序对select语句返回的记录集中的每一行进行相同或不同操作,不需要每次都对记录集进行同一种操作。
游标临时缓冲区按位置可分为服务器游标和客户端游标。
客户端游标的临时缓冲区位于本地客户终端上,与操作相关的整个记录集会通过网络被传送到本地机器上,客户端游标的操作速度很快。但是这种方法需要先把数据从服务器端下载下来,在操作的数据库较大的时候会消耗大量客户端内存。
客户端游标仅支持静态游标。
服务器端的游标的临时缓冲位于服务器,只是把请求的数据返回客户端,在通过网络处理大型数据库时,其性能优于客户端游标。
通常,使用服务器游标就可实现绝大多数游标操作,客户端游标常常作为服务器端游标的辅助,用于完成服务器端游标不支持的Transact语句或批处理。
LabVIEW数据库连接工具包只支持服务器端游标对数据库进行操作。
服务器游标类型
服务器游标的四种类型
游标类型 | 功能 |
---|---|
仅向前 | 仅允许在记录集中向前移动浏览记录;在浏览数据期间,不能看到其他用户对数据库的更改;在当前行处理结束后,立即检查数据库是否有变化;使用系统资源最少、性能最高的游标 |
键集 | 允许前后移动;可以看到其他用户添加到数据库中的记录;其他用户删除的数据库记录暂时不会从当前记录集中移除;常用于在数据量较大的记录集中操作少量记录 |
动态游标 | 允许前后移动;可实时监测其他用户对数据库的任意更改 |
静态游标 | 允许前后移动;在浏览数据期间不能看到其他用户的任何更改;显示记录集刚生成时的状态,以后不再变化;常用于不需要检查数据库变化和不需要浏览数据记录的情况 |
仅需要从头到尾查看数据,可以选择仅向前或静态游标;
返回的记录集中含有大量数据,而仅需要对其中少量几个进行处理,用键集;
需要记录集实时同步显示其他用户对数据库的更改用动态游标;
除非必要,不应频繁改变游标类型;
在LabVIEW中,服务器游标类型可通过DBToolsExecuteQueryVI的cursor type设置。
可以使用DBTools Move To Previous Record、DB Tools Move To Next Record、DB Tools MoveTo Record N实现数据记录的浏览。
连接数据库
返回数据表user的所有值
判断数据集中是否存在记录
取出数据集中第一条记录的第一个值和第二个值
将游标向前移动一个位置
取出游标当前指向位置的记录的第一个值和第二个值
存储过程
存储过程由流控制与SQL语句编成。
与宏类似,存储过程是一组为了完成特定功能预先编译过的存储在数据库中的SQL语句。
创建存储过程
create procedure 存储过程名称(in/out/inout 参数名 参数类型(长度))
begin
SQL语句;
end;
in:该类型参数作为输入,也就是需要调用时传入值
out:该类型参数作为输出,也就是该参数可以作为返回值
inout:既可以作为输入参数,也可以作为输出参数
参数类型长度:不指定长度时mysql会默认一个长度,如int会默认int(11),为什么是11,因为int的有符号类型的最大长度就是-2147483648,是11位的。
查看存储过程
select * from information_schema.routines where routine_schema = 'xxx'; --查看指定数据库的存储过程及状态信息
show create procedure 存储过程名字 ; --查看某个存储过程的定义sql语句
删除
drop procedure [if exists] 存储过程名字;
存储过程可以在DBMS中创建,也可以在LabVIEW中通过DB Tools Execute Query VI执行SQL语句创建。
通过navicat创建一个存储过程:
右键单击查询-新建查询-输入代码-运行
这个是返回表user中,groupID=s_gp的项的总数
使用LabVIEW完成同一操作
使用navicat运行已经创建的存储过程:
新建查询,
call需要运行的存储过程,
运行,
结果直接显示在下方
要用LabVIEW运行已创建的存储过程,只需要将其名称传递给DB Tools Execute Query VI,也可以执行带参数的存储过程。
使用带参数的SQL语句执行存储过程
组合法执行存储过程