石鑫华视觉 手机微信QQ:13450001061 / 18038383457

图像编程

LabVIEW基于sqlite3.dll动态库函数操作SQLite数据库

文章来源:石鑫华视觉网时间:2022-03-23 18:37:59 点击:958

LabVIEW基于sqlite3.dll动态库函数操作SQLite数据库

LabVIEW基于ODBC使用LabSQL操作SQLite数据库
http://pcmv.cn/thread-28283-1-1.html?fromuid=9
(出处: 视觉论坛VISIONBBS|视觉之家VISIONHOME)
上面的帖子中,介绍了使用ODBC方式驱动SQLite数据库,并且使用了LabSQL库来操作SQLite。这里需要配置ODBC,需要对LabSQL也有一定的了解。本主题,将介绍使用sqlite3.dll动态链接库中的函数直接操作SQLite数据库。

关于本主题中的内容,可以搜索一下《LabVIEW访问SQLite数据库接口研究》文章,有介绍了一下大概要用到sqlite3.dll库中一些基本函数的使用方法,例如open、prepare、step、finalize、close等。

本示例中,使用到了prepare准备函数,用于编译SQL执行语句。本示例使用的sqlite3.dll是官网下载的最新版本sqlite-dll-win32-x86-3380100/sqlite-dll-win32-x64-3380100,其中包含了sqlite3_prepare、sqlite3_prepare_v2、sqlite3_prepare_v3三个版本的函数。其中sqlite3_prepare和sqlite3_prepare_v2函数可以用于本示例中。但是sqlite3_prepare_v3因为多了unsigned int prepFlags这个参数,所以不适用本示例(可自行修改添加本参数以适用V3版本)。关于三个版本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 */);

int sqlite3_prepare_v2(  
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 */);

int sqlite3_prepare_v3(  sqlite3 *db,            /* Database handle */  
const char *zSql,       /* SQL statement, UTF-8 encoded */  
int nByte,              /* Maximum length of zSql in bytes. */  
unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */  
sqlite3_stmt **ppStmt,  /* OUT: Statement handle */  
const char **pzTail     /* OUT: Pointer to unused portion of zSql */);
本示例需要区分LabVIEW32和64位版本。32位的LabVIEW调用32位的sqlite3.dll,64位的LabVIEW则调用64位的sqlite3.dll。不能兼容一起使用,64位的LabVIEW也不能调用32位的sqlite3.dll。这个就没有LabSQL方式使用ODBC驱动来的方便,在使用LabSQL ODBC方式时,编写的示例在32/64位LabVIEW中可以随便切换。但是这种方法有一个好处是可以不用如第三方的SQLiteStudio来创建数据库。在使用sqlite3.dll的Open函数时,对于指定路径的数据库,如果存在,则直接打开;如果不存在,则新建然后再打开。所以,这里是可以不用先创建一个数据库的。只要路径方式符合Windows环境中的路径要求,指定名称,就可以自动的创建一个数据库。然后,再使用创建表等函数,来创建需要的表。另外就是sqlite3.dll函数不能直接返回多行数据,所以要当要读取多行数据时,是使用LabVIEW的for循环来处理的,这样如果读取数据比较多时,可能耗时比较大,具体的没有验证过。不过一般LabVIEW环境中使用数据库,都是只考虑写入,一般不做读取分析。数据分析一般会放到其它应用中来处理。

本示例,可以针对中文的路径、表名称、字段、内容等。使用方法是将GBK的内容,转换为UTF8的内容。在主要的execute执行函数中,添加了UTF8到TXT,TXT到UTF8等判断。如果数据库没有存在,使用sqlite3.dll的Open函数自动合建时,则该数据库的字符集将是UTF8方式的。这时,需要将表名称、字段名称、内容等涉及中文的,都转换为UTF8方式。而如果是使用第三方的SQLiteStudio创建的数据库,默认是GBK字符集,这时就不需要转换为UTF8。

本示例演示了查询表、创建表、插入数据、查询数据、更新数据、删除数据等常规的SQL命令。

下面的是32位LabVIEW的效果:

原数据库中的内容

插入新的数据

更新数据(密码更新,倒转)

删除数据

下面的是64位LabVIEW的效果:

原始数据

插入数据

更新数据(密码更新,倒转)

删除数据

示例下载:
LabVIEW2020SP1F1x86 32位版本:
 SQLite x86VI.rar (1.24 MB, 下载次数: 0, 售价: 10 快钱)

LabVIEW2020SP1F1x64 64位版本:

首页
84162741QQ
联系