标题:Qt编写物联网管理平台38-多种数据库支持
作者:liudianwu
日期:2022-07-04 09:39
内容:
## 一、前言
本系统设计之初就要求支持多种不同的数据库,比如sqlite、mysql、postgres、sqlserver等,甚至包括国产数据库比如人大金仓kingbase等,(由于现在国产化的大力推进,国产数据库也是必须要支持的),Qt中封装的数据库组件sql模块,对所有数据库都做了抽象层,这就为应用程序做多种数据库支持做了很好的前提准备,所以更多的在细节处理,比如数据库日期范围查询,不同数据库处理方式不一样,这就需要在自己封装的组件中做不同的处理,还有就是数据库分页,不同数据库的分页查询语句是不一样的,比如sqlite和mysql使用的是limit关键字,postgres和kongbase数据库用的是limit offset关键字,sqlserver用的是top关键字,oracle最复杂需要用隐藏列做组合,这个都需要在自己封装的轮子中做特殊处理,封装成一个函数直接调用。
数据库的几点经验总结:
- 在sqlite数据库中没有数据类型概念,你设置的int依然可以存储字符串。其他数据库有数据类型区分。
- 设计数据库字段的时候尽量避开数据库关键字和函数关键字,比如year、month、plan等,如果必须要则执行sql语句的时候对应字段要加上引号。
- 除了sqlite数据库外,其他数据库都有长度要求,比如设置的2,你硬要插入长度3则会报错,执行不成功。
- varchar类型存储字符串,gbk编码下一个汉字2字节,utf8编码下一个汉字3字节,所以一定要考虑好,比如内容 '启用' 最好设置长度6字节。
- 为了尽可能减少数据库文件体积,建议在已知字段长度的情况下尽量按照已知的长度设置。
- 记录行数比较多的数据库表,经常需要查询的表,必须设置索引,不然非常慢。
- 小数据量的表比如就几千条以下,而且几乎不需要变动,则不必要设置索引,这样可以加快插入速度。
- 整型字段 INT、INTEGER 不能设置长度,也不需要设置长度,不然在sqlserver等数据库执行的时候会报错。
- 建议给每个表设置个主键字段,尤其是需要建索引的表必须有主键字段。
- linux上安装mysql客户端命令:apt-get install libmysqlclient-dev 。
关于Qt数据库开发的一些冷知识。
- Qt即支持库的形式直接和数据库通信,也支持ODBC数据源的形式和各种数据库通信,这样就涵盖了所有的情况。
- Qt数据库程序打包发布,所有前提:注意区分32/64位,你的程序是32位的就必须带上32位的库,64位的必须带上64位的库,这点Qt的库也是这个要求。mysql发布最简单,带上一个mysql的动态库文件就行(windows上的是libmysql.dll),非常简单 ..