SQLite FAQ中文版
1) 如何创建自增字段?
简单的回答:一个声明为 INTEGER PRIMARY KEY 的字段将自动增加。
这里是详细的答案: 从 SQLite 的 2.3.4 版本开始,如果你将一个表中的一个字段声明为 INTEGER PRIMARY
KEY,那么无论你何时向该表的该字段插入一个 NULL 值,这个 NULL 值将自动被更换为比表中该字段所有行的最大值大
1 的整数;如果表为空,那么将被更换为 1。比如,假设你有这样的一张数据表:
CREATE TABLE t1(
a INTEGER PRIMARY KEY,
b INTEGER
);
在这张数据表里,声明
INSERT INTO t1 VALUES(NULL,123);
在逻辑意义上等价于:
INSERT INTO t1 VALUES((SELECT max(a) from t1)+1,123);
一个新的API函数 sqlite3_last_insert_rowid()
返回最近的插入操作的整形键
注意这个整型键始终比之前插入表中的最后一个键大1。新键相对于表中的已有键来说是唯一的,
但它可能与之前从表中删除的键值重叠。要始终得到在整个表中唯一的键,在INTEGER PRIMARY
KEY的声明之前加关键词AUTOINCREMENT.这样被选的键将总是比表中已存在的最大键大1。若可能的
最大键已存在于表中,INSERT操作将失败并返回一个SQLITE_FULL错误码.
(2) SQLite 支持哪些数据类型?
参见 http://www.sqlite.org/datatype3.html
.
(3) 为什么能向 SQLite 数据库的整型字段中插入字符串?
这是一个功能,不是一个 bug。你可以在任何字段中放任何信息,而不用管字段声明为什么类型。
你可以往整型字段中插入任意长度的字符串,或者往布尔字段中插入浮点数,或者往字符字段中 插入日期。在 CREATE
TABLE 命令中你指定给这个字段的数据类型不会限制插入这个字段的数据。
所有的字段可以插入任意长度的字符串。但对于 INTEGER PRIMARY KEY 字段例外。这种字段只能
存放一个64位的整数,否则会出错。
但SQLite会默认你希望使用声明的字段类型。所以,比如你希望在一个声明为INTEGER的字段
中插入一个字符串,SQLite会试图将其转换为一个整数。如果转换成功,那么整数将被插入,否
则插入字符串,这种特性有时被称作type or column
affinity
.
(4) 为什么 SQLite 认为表达式 '0'=='00' 为真?
在 2.7.0 之后,表达式不成立。参见文档 datatypes in
SQLite version 3
(5) 为什么 SQLite 不允许在同一张表里使用 '0' 和 '0.0' 作为两个不同的行的主键?
你的主键一定是数值类型的,把类型改为 TEXT
相关文档:
使用工具:
SQLite Expert SQLite数据库管理工具,非常好用,类似我之前介绍的EMS SQL Manager 2007 for MySQL
System.Data.SQLite SQLite For ADO.NET驱动,类似我之前介绍的MySql.Data.dll
这2个工具都包括了SQLite的引擎
1、从http://www.s ......
2010年SQLite学习笔记之二
一.建立数据库
sqlite3.exe test.db
二.双击sqlite-3_6_16目录下的程序sqlite3.exe,即可运行
三.退出
.exit
或者
.quit
四.SQLite支持如下5种数据类型
1.NULL:空值。
2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。
3.REAL:浮点数字,存储为8-byte IEEE浮点数 ......
1:常用接口
个人比较喜欢
sqlite,
使用最方便,唯一的准备工作是下载
250K
的源;而且作者很热心,有问必答。
以下演示一下使用
sqlite
的步骤,先创建一个数据库,然后查询其中的内容。
2
个重要结构体和
5
个主要函数:
sqlite3 &nbs ......
......
//插入及更新操作
int nRet = 0;
sqlite3 * db = NULL;
CString strFilePath; //数据库存储路径
//路径赋值(省略)
//连接数据库
nRet = sqlite3_open16(strFilePath, &db); //有几个打开函数可供调用,使用WCHAR类型路径用这个
if(nRet != SQLIT ......