SQLite编译安装

ACID(原子性、一致性、隔离性、持久性)

编译安装

到http://www.sqlite.org/download.html上下载最新的源码:

export STAGING_DIR=xxx/toolchain/allwinner_t113/
autoreconf -ivf
./configure --host=arm-linux-gnu --prefix=$(pwd)/tmp/ CC=$(pwd)/xxx/allwinner_t113/bin/arm-openwrt-linux-gcc CFLAGS="-Os" --enable-static=no
make
make install

另外附上一个RISC-V在FreeRTOS编译静态库的例子:

autoreconf -ivf
#对于需要配置工具链和特殊配置的,可以查看./configure --help帮助,比如,使用risc-v工具链编译FreeRTOS上使用的libsqlite.a,并且去除调试信息,可以有如下配置:
./configure --host=riscv64-unknow-gnu --prefix=xxx --enable-shared=no CC=xxx CFLAGS='-DSQLITE_THREADSAFE=0 -DSQLITE_OS_OTHER=1 -DSQLITE_OMIT_WAL=1'
make
make install

复制动态库和头文件到交叉编译工具链:
sudo cp -rf ./include/ /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/include
sudo cp -drf ./lib/* /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib

复制动态库和可执行程序到开发板文件系统:
cp -d ./lib/so /mnt/rootfs/lib/
cp ./bin/* /mnt/rootfs/bin/

sqlite test.db "select * from t;"仅执行(直接交付给sqlite库)双引号中的命令之后返回,后面可以接管道处理
sqlite的命令以“;”作为结束,“/”和“GO”都可以
sqlite进入脚本交互模式
交互模式期间,如果secureCRT中不能使用退格和方向键等命令,可以在退出sqlite之后,终端中输入 “stty erase ^H”解决

自带的sqlite3脚本常用命令

select * from xxx; 查询某个表的所有记录
.help 查看帮助
.quit/.exit 退出sqlite3
.header on/off 可以使能或者关闭表头的显示
.mode xxx 可以切换显示模式,包括list(默认),line,column,instert,json,box等,其中column是列形式排列输出,line是逐行输出表中的记录,markdwon和box可以严格按照表格格式输出,json是让查询输出用json输出
.mode insert xxx(表名) 可以将所有的查询输出结果,变为标准的SQL插入语句,方便导入其他数据库(一个表中的多条记录)
.output filename 输出到文件
.indices 创建索引
.schema 生成创建表(DDL)的语句,方便导入其他数据库
.database 显示当前打开的数据库
.dump 直接产生整个数据库的ASCI创建语句
.explain 进入sql语句调优模式,explain slect * from t 分析执行
.timeout 访问数据库中一个表的时候,如果这个表格被锁(占用),等待超时时间

shell的应用:

#/bin/sh
sqlite3 test.db << EOF
create table t (id int, name char);
insert into t values (1, 'wang');
insert into t values (2, 'ye');
insert into t values (3, 'kai');
EOF
其中“<< XXX ... XXX”是here document,XXX可以是任何成对的字符

使用C语言访问sqlite:

#include <sqlite3.h>

sqlite3_open() 打开数据库
sqlite3_exec() 执行命令,可以设置完成回到函数
sqlite3_free() 命令执行失败后,用于释放数据库
sqlite3_errmsg() 分析错误信息
sqlite3_close() 关闭数据库

支持的数据类型

对于Mysql,它支持的数据类型:

整数型:
TINYINT    (1B)
SMALLINT   (2B)
MEDIUMINT  (3B)
INT        (4B)
BIGINT     (8B)

浮点型:

FLOAT      (4B)
DOUBLE     (8B)

字符型:

CHAR       (0~255B)
VARCHAR    (0~255B)
TINYBLOB   (0~255B)
TINYTEXT   (0~255B)
BLOB       (0~65535B)
TEXT       (0~65535B)
MEDIUMBLOB (0~16777215B)
MEDIUMTEXT (0~16777215B)
LONGBLOB   (0~4294967295B)
LONGTEXT   (0~4294967295B)

时间日期:

DATE       (3B)
TIME       (3B)
YEAR       (1B)
TIMESTAMP  (8B)
DATETIME   (8B)

复合类型:

ENUM
SET

对于SQLite,数据类型并没有像其他的数据库一样使用固定类型进行限定,而是使用一种动态的策略,通过给每个列定义一个比较泛的数据类型,具体根据每列数据的长度大小,最终决定使用什么数据类型进行存储,以此增强存储效率。
这五大类型为:

NULL. The value is a NULL value.
INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
REAL. The value is a floating point value, stored as an 8-byte IEEE floating point number.
TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16LE).
BLOB. The value is a blob of data, stored exactly as it was input.

由于在磁盘上的存储格式各异,所以当进行处理的时候,加载到内存的过程中是需要进行转换,例如INT被统一转换为8B。
sqlite没有专门用于存储Bool、时间、日期的数据类型,使用INT、REAL或者TEXT替换,例如使用current_date、current_time、current_timestamp关键字。
另外sqlite并不支持VARCHAR(100)这样的括号限制数据长度的命令,会被自动忽略。

对于SQLite一个比较特殊的地方在于,一个字段可能包含不同的存储类型,大小排序根据内定的一套规则进行:
NULL < REAL/INTERGER<TEXT < BLOB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值