LabVIEW利用数据库连接池来完成DB操作

2021-08-08  本文已影响0人  刘小白DOER

    昨天测试实践了-Python实现数据库连接池化,于是想起用以前虚拟仪器做的插入数据库操作,也可以做数据库连接池来提高效率。

    在设备参数轮询中,每隔30秒或者一分钟需要将数据库写入数据库,在存在很多sql语句的情况下,每条sql语句需要打开数据库连接,然后执行sql语句,再关闭连接。如果使用数据库连接池的话,就可以预先打开几个数据库连接,然后循环使用这些连接,最后一起关闭连接。

    LabVIEW作为高级语言,自带队列操作。笔者将打开3个数据库连接入队列,然后入队列依次执行数组中的SQL语句,执行完毕后再将数据库连接入队列。

    整个程序框图如下,测试成功!程序框图托管在LabVIEW-VIs/mysql_conn.pool_Queue.vi at main · laufei90/LabVIEW-VIs (github.com)  。关于数据库连接方面,笔者使用的是ODBC。

1、获取队列引用中使用connection reference作为队列元素类型。

2、在程序运行开始时,笔者使用for循环开启三个数据库连接入队列。

3、根据sql数组的大小来确定出队列for循环的次数,然后使用三个线程来完成sql执行,执行完毕后再次入队列。在处理sql时,需要判断数组中的sql是否为空,如果为空则说明数组中的sql语句已经执行完毕,那么就直接关闭连接。

    整个程序框图其实还是有bug的。

1、虽说是三个线程来处理,但是只能三个为一组来执行,如果有个sql语句较慢,也得等待执行完毕后才能循环下三个sql语句。目前笔者还没有想到好办法来优化。

2、在sql执行的错误方面需要进一步处理,如果遇到网络抖动或者DB管理员杀掉连接进程,连接失效,那么执行失败后照样会将数据库连接入队列。那么该怎么办呢?可以使用简单的数据库操作来测试错误code。下面就是一个简单的测试例子,可以将sql语句写错、在5秒的等待时间内把数据库线程进程杀掉等等来测试得到error out中的code,根据code来进行错误提示或者再次打开一个连接入队列。

    笔者测试结果为:sql语句有误code是  -2147217900  ,连接中断是-2147467259   。

3、sql'语句在执行时是通过判断SQL语句是否为空来选择的,如果真的遇到sql因为遗忘而为空,那么就会关闭一个连接,数据库连接池就会少一个。

4、整个程序作为子函数来说,如果将DNS和连接数量作为函数的接口,那么调用整个这个函数也要修改出队列循环中的sql并发数量。

上一篇下一篇

猜你喜欢

热点阅读