如何使用Sqlite3数据库 iOS Sqlite3数据类型
在iOS应用的客户端存储数据一般是存储在SQLite3中。在进行数据库Sql操作之前,首先有个问题需要说明,就是Sqlite的数据类型,和其他的数据库不同,Sqlite支持的数据类型有他自己的特色,这个特色有时会被认为是一个潜在的缺点,但是这个问题并不在我们的ios开发讨论范围之内。
Sqlite3数据类型及存储类
每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类:
(1)NULL,值是NULL
(2)INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放
(3)REAL,值是浮点型值,以8字节IEEE浮点数存放
(4)TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放
(5)BLOB,只是一个数据块,完全按照输入存放(即没有准换)
注:①Sqlite没有单独的布尔存储类型,它使用INTEGER作为存储类 型,0为false,1为true
②Sqlite没有另外为存储日期和时间设定一个存储类集,内置的sqlite日期和时间函数能够将日期和时间以TEXT,REAL或INTEGER形式存放
TEXT 作为IS08601字符串("YYYY-MM-DD HH:MM:SS.SSS")
REAL 从格林威治时间11月24日,4174 B.C中午以来的天数
INTEGER 从 1970-01-01 00:00:00 UTC以来的秒数
SQLiteTypeAffinity(类型检测)
用于自动检测值的类型,以下列举Affinity如何决定类型的规则
(1)如果类型声明中有"CHAR","CLOB",or"TEXT",则使用Textaffinity
(2)如果类型声明中有int,则使用INTEGERaffinity.
(3)如果类型声明中有"REAL","FLOA",or"DOUB",则使用REALaffinity
(4)如果类型声明中有BLOB或没有指定类型,则使用affinityNONE
(5)否则使用Numericaffinity
类型比较NULL
memcmp函数原型
intmemcmp(constvoid*ptr1,constvoid*ptr2,size_tnum);
比较两个指针指向内存的前num个byte
比较之前的类型转换
l(INTEGER,REALorNUMERIC)和(TEXTorNONE)比较,则TEXT,NONE会被转换成NUMERIC
lTEXT和NONE比较,则NONE会被转换成TEXT
其他情况直接比较。
值得注意的是大多数的数据库在数据类型上都有严格的限制,在建立表的时候,每一列都必须制定一个数据类型,只有符合该数据类型的数据可以被保存在这一列当中。而在 Sqlite 2.X中,数据类型这个属性只属于数据本生,而不和数据被存在哪一列有关,也就是说数据的类型并不受数据列限制(有一个例外:INTEGER PRIMARY KEY,该列只能存整型数据)。希望通过iOS SQLite的操作内容的学习能对你ios应用开发有所帮助。
Sqlite3数据类型及存储类
每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类:
(1)NULL,值是NULL
(2)INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放
(3)REAL,值是浮点型值,以8字节IEEE浮点数存放
(4)TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放
(5)BLOB,只是一个数据块,完全按照输入存放(即没有准换)
注:①Sqlite没有单独的布尔存储类型,它使用INTEGER作为存储类 型,0为false,1为true
②Sqlite没有另外为存储日期和时间设定一个存储类集,内置的sqlite日期和时间函数能够将日期和时间以TEXT,REAL或INTEGER形式存放
TEXT 作为IS08601字符串("YYYY-MM-DD HH:MM:SS.SSS")
REAL 从格林威治时间11月24日,4174 B.C中午以来的天数
INTEGER 从 1970-01-01 00:00:00 UTC以来的秒数
SQLiteTypeAffinity(类型检测)
用于自动检测值的类型,以下列举Affinity如何决定类型的规则
(1)如果类型声明中有"CHAR","CLOB",or"TEXT",则使用Textaffinity
(2)如果类型声明中有int,则使用INTEGERaffinity.
(3)如果类型声明中有"REAL","FLOA",or"DOUB",则使用REALaffinity
(4)如果类型声明中有BLOB或没有指定类型,则使用affinityNONE
(5)否则使用Numericaffinity
类型比较NULL
memcmp函数原型
intmemcmp(constvoid*ptr1,constvoid*ptr2,size_tnum);
比较两个指针指向内存的前num个byte
比较之前的类型转换
l(INTEGER,REALorNUMERIC)和(TEXTorNONE)比较,则TEXT,NONE会被转换成NUMERIC
lTEXT和NONE比较,则NONE会被转换成TEXT
其他情况直接比较。
值得注意的是大多数的数据库在数据类型上都有严格的限制,在建立表的时候,每一列都必须制定一个数据类型,只有符合该数据类型的数据可以被保存在这一列当中。而在 Sqlite 2.X中,数据类型这个属性只属于数据本生,而不和数据被存在哪一列有关,也就是说数据的类型并不受数据列限制(有一个例外:INTEGER PRIMARY KEY,该列只能存整型数据)。希望通过iOS SQLite的操作内容的学习能对你ios应用开发有所帮助。