iOS SQLite3使用方法和技巧
在iOS应用的客户端存储数据一般是存储在SQLite3中,下面简单介绍iOS SQLite3支持的数据类型,以及类型间相互关系。大多数数据库使用静态的严格的类型系统,列的类型在创建表的时候就已经指定了。SQLite使用动态的类型系统,列的类型由值决定。
iOS SQLite3具有的数据类型
NULL:NULLvalue
Integer:值是signedinteger类型,大小可以是1,2,3,4,6,8bytes
- REAL:浮点类型
- TEXT:以UTF-8,UTF-16BEorUTF-16LE编码存储的字符类型
- BLOB:二进制数据
其它数据类型说明
Integerprimarykey列是个例外??
- 布尔类型:SQLite中没有定义布尔类型,而是以Integer存储布尔值,0(false),1(true)
Dateandtime类型
SQLite中也没有定义日期时间类型,日期时间可以用TEXT,REAL,orINTEGER存储
TEXT:存储为字符串("YYYY-MM-DDHH:MM:SS.SSS").
REAL:asJuliandaynumbers,thenumberofdayssincenooninGreenwichonNovember24,4714B.C.accordingtotheprolepticGregoriancalendar. INTEGER:asUnixTime,thenumberofsecondssince1970-01-0100:00:00UTC.
SQLiteTypeAffinity(类型检测)
用于自动检测值的类型,以下列举Affinity如何决定类型的规则
(1)如果类型声明中有int,则使用INTEGERaffinity.
(2)如果类型声明中有"CHAR","CLOB",or"TEXT",则使用Textaffinity
(3)如果类型声明中有BLOB或没有指定类型,则使用affinityNONE
(4)如果类型声明中有"REAL","FLOA",or"DOUB",则使用REALaffinity
(5)否则使用Numericaffinity
类型比较NULL
memcmp函数原型
intmemcmp(constvoid*ptr1,constvoid*ptr2,size_tnum);
比较两个指针指向内存的前num个byte
比较之前的类型转换
l(INTEGER,REALorNUMERIC)和(TEXTorNONE)比较,则TEXT,NONE会被转换成NUMERIC
lTEXT和NONE比较,则NONE会被转换成TEXT