TA的每日心情 | 奋斗 3 小时前 |
---|
签到天数: 3387 天 连续签到: 9 天 [LV.Master]2000FPS
|
发表于 2022-3-23 18:30:01
|
显示全部楼层
|阅读模式
来自:广东省东莞市 电信
注册登陆后可查看附件和大图,以及购买相关内容
您需要 登录 才可以下载或查看,没有账号?注册会员
x
LabVIEW基于sqlite3.dll动态库函数操作SQLite数据库
LabVIEW基于ODBC使用LabSQL操作SQLite数据库
http://visionbbs.com/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, 下载次数: 109, 售价: 10 元)
LabVIEW2020SP1F1x64 64位版本:
SQLite x64VI.rar
(2.26 MB, 下载次数: 1, 售价: 10 元)
|
|