【sqlite开发】遇到的问题及解决方法收录
前言
sqlite是一种本地化的轻量级数据库,在数据量级不是很大(百万以上)的情况下,并且开发人员习惯SQL的业务开发逻辑时,能很大的提供项目开发效率。以下主要是收录在window10系统有以及国产桌面操作系统(麒麟kylin v10 sp1、统信UOS)项目开发中遇到的问题及解决方法。
开发环境及常用工具
window 10
开发环境
本人是使用QTcreator创建项目进行开发的,只需要在.pro文件中加上QT += sql即可
常用工具
sqlite3(点击可到下载页面,下载sqlite-tools-win-x64-xxxx.zip),找一个目录进行解压(比如:D:\sqlite),包含有以下4个文件,这里只介绍sqlite3.exe。
把D:\sqlite路径加入到系统环境变量path中,即可在CMD命令行中使用sqlite3。
以下是命令行操作样例
国产桌面操作系统(linux)
开发环境
QTcreator开发的方式在window中已经介绍,是通用的,以下介绍C++程序的开发方式,需要下载libsqlite3库
sudo apt install libsqlite3-dev
编译时,要加上-lsqlite3,以下为Makefile文件
CC = g++
CFLAGS =
DEBUGFLAG = -g -Wall
SRCS = $(wildcard *.cpp)
LIBDIRS = -L./
LIBS = -lsqlite3
INCLUDE =
TARGET = sqlitedemo
OBJS = $(SRCS:.cpp=.o)all: $(TARGET)# 生成可执行文件
$(TARGET): $(OBJS)$(CC) $^ -o $@ $(LIBS) # 通用规则:编译 .cpp 文件为 .o 文件
%.o: %.cpp$(CC) -c $< -o $@ $(LIBS) clean:rm -f $(OBJS) $(TARGET).PHONY: all clean
常用工具
sqlite3,麒麟kylin v10 sp1 和统信UOS系统默认已经安装有sqlite3,直接命令行sqlite3 xxx.db即可,sqlite3的语法是通用的。
问题收录及解决方法
sqlite与mysql存在差异的语法
1、创建表时的自增字段
SQLite:用INTEGER PRIMARY KEY
MySQL:用AUTO_INCREMENT
2、忽略方式插入数据
SQLite:INSERT OR IGNORE INTO users (id, name) VALUES (1, 'Alice');
MySQL:INSERT IGNORE INTO users (id, name) VALUES (1, 'Alice');
sqlite比mysql多了一个OR
3、Linux共享目录给window,window无法写数据到共享目录中的db文件
在开发方案选型中,不想编写专有的socket通信服务来打通Linux和window的交互时,可以在共享目录中通过缓存文件(普通的文件读写、sqlite数据库文件读写等)进行交互,特别是1对1交互,且涉及的交互内容少时,此种方案开发快,响应快且稳定。
本人在开发时,使用smb服务进行的共享挂载。先是在Linux下生成db文件,然后window(专业版win10)端需要读取数据,并写入数据,此时发现读取数据是正常的,却无法写入数据,是存在写入权限问题,我手动去删除文件时,报错信息如下
这是系统权限冲突了,我没有选择去改到window的权限,而是如下简单的操作即可:
1、把这个db文件拷贝到window桌面;
2、然后在Linux系统的共享目录中,删掉这个db文件;
3、如果把window桌面的db文件拷贝会共享目录中,此时在window端的共享目录中可以删掉这个db文件,说明不存在系统权限冲突的问题,此时window端的sqlite可以正常写入数据了。