sqlite使用动态数据类型,即值的数据类型与值相关,与其容器无关。
1.存储类(Storage Class):数据保存到文件后的表现形式。有:
NULL - 空值
INTERGER - 有符号整数类型
REAL - 浮点数类型
TEXT - 字符串(其编码取决于DB的编码)
BLOB - 二进制表示。
sqlite通过值的类型来判断其类型:
(1)sql语句中被单引号或双引号括起来的文字,被指派为TEXT。
(2)如果文字没有被引号括起来,且没有小数点和指数,被指派为INTEGER.
(3)如果文字没有被引号括起来,且有小数点和指数,被指派为REAL. 2.类型亲和性:任何列仍然可以存储任何类型的数据,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式。类型亲和性预定了用什么存储类在字段中存储值。一个字段的亲和性由它预声明的类型决定。
有:
TEXT
NUMERIC
INTEGER
REAL
NONE
3.声明类型:创建表时使用的的数据类型。在SQLite中,字段没有类型或域。当给一个字段声明了类型,该字段实际上仅仅具有了该类型的亲和性。
4.注意
(1)建表时指定字段为integer,存储的数值可以是int类型,也可以是long类型。但是查询数据时,解析cursor,如果是long类型的数据,用int去接收,得到的数据会是一个负值。(笔者就在这上面吃了亏),所以如果integer类型存放了int和long两种类型时,一定要做好标记,分别解析。
(2)查询时通过时间来排序,可以使用cast进行类型转换。实际开发中不用cast,有时也可以正常查询(比如String转 integer)。