SQLite学习笔记3
SQLite用一种动态类型系统。值的数据类型只和自身有关,而和所储存的位置无关。SQLite向后兼容通用的静态类型数据库引擎系统。为了达到最大的兼容性,SQLite支持为列所储存的数据建议一个类型(注意不是强迫)。理论上,任何列依旧可以储存任类型的数据,只是针对某些列,如果给定了一个建议类型的话,数据库将按建议的类型储存数据。这个被优先使用的数据类型被称为“亲和类型”。 SQLite3中有以下几种亲和类型: TEXT:具有TEXT亲和类型的列将把数据储存为:NULL,TEXT或者BLOB类型,若插入一个数字数据,则这个数字数据在被储存前将被转换为文本 NUMERIC:具有NUMERIC亲和类型的列,可以将数据作为五种类型中的某一种来储存。若插入一个文本数据,它会尝试将文本转换为整数或实数,若转换成功,则用INTEGER或REAL类型储存数据,若不能转换则用TEXT类型储存数据。 INTEGER: REAL: NONE:无任何转换,数据输入时不会将数据强制转换为其他类型。 比较表达式的结果遵循以下规则: A、 一个空储存类型的值小于任何值(包括另一个具有空储存类型的值) B、 一个整数值或实数值小于任何文本值或BLOB值 C、 一个文本值小于BLOB值。 D、 当两个BLOB文本比较时,取决于memcmp()函数。 SQLite数据库中储存的数据有下面几种类型(有可能是由数据库引擎转换而来): NULL:空值 INTEGER:有符号整数,根据值的大小被储存为1,2,3,4,6,8字节的整数。 REAL:浮点数,作为8字节IEEE浮点数保存。 TEXT:文本字符串,用数据库编码保存(UTF-8,UFT-16,UTF-16-LE) BLOB:blob数据,严格按照输入格式保存 除了INTEGER PRIMARY KEY列以外数据库中的其他列能用来储存任何类型的数据。 具体的值,不如SQL语句部分的带双引号或单引号的文字被定义为文本,若文字没带引号并没有小数点或指数则被定义为整数,若文字没带引号但有小数点或指数则被定义为实数,若值是空则被定义为空值,BLOB数据使用符号X’ABCD’来标识 SQLite3错误代码: #define SQLITE_OK 0 /* Successful result */ #define SQLITE_ERROR 1 /* SQL error or missing database */ #define SQLITE_INTERNAL 2 /* An internal logic error in SQLite */ #define SQLITE_PERM 3 /* Access permission denied */ #define SQLITE_ABORT 4 /* Callback routine requested an abort */ #define SQLITE_BUSY 5 /* The database file is locked */ #define SQLITE_LOCKED 6 /* A table in the database is locked */ #define SQLITE_NOMEM 7 /* A malloc() failed */ #define SQLITE_READONLY 8 /* Attempt to write a readonly database */ #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite_interrupt() */ #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ #define SQLITE_NOTFOUND 12 /* (Internal Only) Table or record not found */ #define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ #define SQLITE_PROTOCOL 15 /* Database lock protocol error */ #define SQLITE_EMPTY 16 /* (Internal Only) Database table is empty */ #define SQLITE_SCHEMA 17 /* The database schema changed */ #define SQLITE_TOOBIG 18 /* Too much data for one row of a table */ #define SQLITE_CONSTRAINT 19 /* Abort due to contraint violation */ #define SQLITE_MISMATCH 20 /* Data type mismatch */ #define SQLITE_MISUSE 21 /* Library used incorrectly */ #define SQLITE_NOLFS 22 /* Uses OS features not supported on host */ #define SQLITE_AUTH 23 /* Authorization denied */ #define SQLITE_ROW 100 /* sqlite_step() has another row ready */ #define SQLITE_DONE101/* sqlite_step() has finished executing (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |