SQLite数据库多平台应用及常见错误分析
SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。SQLite是世界上最广泛部署的数据库引擎之一。SQLite源代码开放,没有授权限制。正是因为其免费、轻巧、绿色等特点,因此SQLite的应用范围很广,在各种软件上都有应用,其中不乏Adobe、Apple、Firefox,甚至包括google、Microsoft、SUN这样的企业。在上位机项目开发中。SQLite的应用也很广泛,今天主要跟大家分享一下SQLite的部署、应用及常见错误分析。
【公众号dotNet工控上位机:thinger_swj】
1 数据库部署
SQLite数据库和其他数据库相比,一个很大的优势在于免部署,也就意味着不需要安装即可使用,但是需要同样也需要数据库客户端管理软件的支持,SQLite的客户端软件很多,包含SQLite Database Browser、SQLite Administrator、SQLite Expert Personal、SQLite Studio等,个人比较喜欢使用SQLite Studio,需要的童鞋可以关注本公众号,在后台发送关键词SQLiteStudio即可获取。为了后续介绍SQLite数据应用,首先要准备好一个数据库及数据表,通过SQLite可以很方便的进行创建,创建完成后会生成一个文件。
如上图所示,创建了一个SQLite数据库,名称为SQLiteDemo,在数据库中创建了一个数据表,名称为Student,Student数据表下会有四个字段,分别为StudentID、StudentName、StudentGender及StudentClass,并向其中插入了两条数据。
2 数据库应用
首先创建一个Windows应用程序,窗体中简单的拖放两个控件,一个查询按钮,一个显示控件DataGridView,我们所要做的就是基于SQLite数据库实现数据的查询。如下图所示:
众所周知,Windows开发会存在平台版本的问题,一般情况下,我们使用的都是Any CPU,Any CPU默认是32位目标平台,但是有的时候我们可能需要在64位平台上使用SQLite,今天着重讲述一下如何在各个平台下实现SQLite的应用。
2.1 默认Any CPU
一般情况下,我们的项目都是使用Any CPU作为目标平台,默认为32位。如果想实现SQLite数据库应用,首先要准备一些类库,因为SQLite并不是微软的数据库,所以Windows系统是没有SQLite类库的,SQLite类库会区分32位和64位,如下图所示:
- 首先将公用的类库复制到Debug根目录下,然后手动添加下SQLiteHelper,SQLiteHelper是一个封装好的SQLite数据库操作类,如下图所示,添加之后,会有错误提示,将System.Data.SQLite.dll添加引用即可消除错误。
- 设置连接字符串:SQLite连接字符串指向的是数据库文件,所以这里首先要之前创建好的数据文件复制到项目中来,直接放到Debug路径下,然后在窗体运行初始化时,设置一下连接字符串,连接字符串格式如下:
- 在查询按钮下,写一段简单的查询代码,如下图所示:
- 运行程序,执行查询事件,代码会报错,如下图所示:
这个错误,很多童鞋经常会遇到,错误提示很明显,就是提示缺少指定模块,模块名称为SQLite.Interop.dll,如果大家还有印象的话,这个dll是在SQLite类库中,32位和64位专有的文件夹中,如下图所示,因此,我们只需要将x86文件夹下的这两个文件复制到Debug目录下,这里一定要复制x86文件夹下的,因为Any CPU默认是x86平台。
- 复制完成后,再次点击查询,结果如下:
2.2 64位平台
当我们使用64位平台时,首先将目标平台改成x64,如下图所示:
这时候,运行界面,点击查询,会出现以下错误:
对于这个错误,我们将x64文件夹下的两个文件复制到Debug目录下,然后替换一下,再执行查询,实现最终的数据读取:
当我们同时将下图中的目标平台修改为x64时,再重新生成,会在bin文件夹下重新产生一个x64的文件夹,这时候所有的生成内容都将存储在x64文件夹下,与之前的Debug无关。
这时候再重新生成,运行界面,点击查询,又会出现下面的错误:
再次遇到这样的问题,我们应该很清楚,就是需要将只需要将类库中x64文件夹下的这两个文件复制到Bin目录下x64文件夹下的Debug文件夹中,同时还需要将数据库复制进去。重新生成,点击查询,结果如下:
2.3 x86平台
当我们将下图中的目标平台修改为x86时,再重新生成,同理会在bin文件夹下重新产生一个x86的文件夹,这时候所有的生成内容都将存储在x86文件夹下,与之前的Debug无关,这里的解决方案与上述2.2描述类似,因此不再作赘述。
3 整体总结
通过针对各个平台的说明,我们发现SQLite使用中常见的错误无非就那么几种,而解决方案也是差不多,始终需要遵从一个原则,保证我们需要的第三方dll放在项目生成的路径下。当我们不清楚项目生成的路径时,可以通过清理解决方案,再重新生成解决方案,观察项目exe的修改时间,是否为当前最新的时间,从而判断该路径是否为项目生成路径。

SQLite数据库多平台应用及常见错误分析的更多相关文章
- FMDB是iOS平台的SQLite数据库框架
1.FMDB简介 什么是FMDBFMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 为什么使用FMDB使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...
- 安卓平台SQLite数据库基础操作总结
最近学了一些安卓开发,在这里分享一下SQLite数据库的使用相关部分,我使用的工具为Android Studio,后台语言为java: 首先,需要创建一个数据库辅助类DataBaseHelper,用于 ...
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- C#中使用SQLite数据库简介(上)
[SQLite数据库] SQLite是一个开源的轻量级的桌面型数据库,它将几乎所有数据库要素(包括定义.表.索引和数据本身)都保存在一个单一的文件中.SQLite用C编写实现,它在内存消耗.文件体积. ...
- UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库
在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...
- 企业出口退税申报系统的Sqlite数据库破解及读写
QQ:564955427 原始出处:https://www.cnblogs.com/Charltsing/p/TSSB.html 最近一些朋友反映龙图的企业出口退税申报系统的Sqlite数据库改变了加 ...
- 微信 SQLite 数据库修复实践
1.前言 众所周知,微信在后台服务器不保存聊天记录,微信在移动客户端所有的聊天记录都存储在一个 SQLite 数据库中,一旦这个数据库损坏,将会丢失用户多年的聊天记录.而我们监控到现网的损坏率是0.0 ...
- MySQL常见错误分析与解决方法总结
MySQL常见错误分析与解决方法总结 一.Can't connect to MySQL server on 'localhost' (10061)翻译:不能连接到 localhost 上的mysql分 ...
- Android之SQLite数据库篇
一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...
随机推荐
- cb40a_c++_STL_算法_交换swap_ranges
cb40a_c++_STL_算法_交换swap_rangesswap_ranges(b,e,b2);如果两个容器的数据数量不一致时,只交换一部分数据,a里面3个,b里面5个,则只会交换3个,b里面还有 ...
- 【DMCP】2020-CVPR-DMCP Differentiable Markov Channel Pruning for Neural Networks-论文阅读
DMCP 2020-CVPR-DMCP Differentiable Markov Channel Pruning for Neural Networks Shaopeng Guo(sensetime ...
- jni不通过线程c回调java的函数 --总结
1.JNIEnv类型是一个指向全部JNI方法的指针.该指针只在创建它的线程有效,不能跨线程传递 2.JavaVM是虚拟机在JNI中的表示,一个JVM中只有一个JavaVM对象,这个对象是线程共享的. ...
- Mybatis学习笔记(1)
CRUD操作 1.从实体类参数中取值 #{属性名} select * from user where username = #{username} 2.当sql语句只有一个参数且参数类型是基本类型或基 ...
- 【题解】[USACO17JAN]Balanced Photo G
题目链接:https://www.luogu.com.cn/problem/P3608 方法一 用树状数组求逆序对先后扫两遍,一次从前往后,一次从后往前,算出每头奶牛左右两边比她高的数量. 最后统计一 ...
- 计算机网络之tcp/ip协议族
TCP/IP协议族是一个四层协议系统: 1. 数据链路层 1.1 作用 (1) 实现网卡接口的网络驱动,以处理数据在以太网线等物理媒介上的传输 (2) 网络驱动程序隐藏了不同物理网络的不同电气 ...
- 宝贝,来,满足你,二哥告诉你学 Java 应该买什么书?
(这次的标题是不是有点皮,对模仿好朋友 guide 哥的,我也要皮一皮) 高尔基说过,对吧?宝贝们,"书籍是人类进步的阶梯",不管学什么,买几本心仪的书读一读,帮助还是非常大的.尽 ...
- 扫描U盘
编辑器加载中...int CSendUDiskDlg::SearchUDisk(void) { int nCount, i; char szDriver[3]; nCount = 0; szDrive ...
- VC GDI+基础用法VC
#include "GdiPlus.h" // 使用GDI+ 命名空间 using namespace Gdiplus; // 与GDI+ 相关的其它头文件,如:GraphicsP ...
- JavaScript基础函数体中的唯一var模式(002)
全局变量是不好的.所以在声名变量的时候,应该采用函数体中的唯一var模式(Single var Pattern).这个模式有不少好处: 提供了一个唯一的地方来查看函数体中声名的变量 在使用一个变量之前 ...