在SQLite中常见问题的分析和总结
如果不向数据库添加任何表,则不会构建数据库。它不会在硬盘上生成任何文件。如果数据库已经存在,它将打开数据库。
2。如何通过sqlite3.dll和sqlite3.def sqlite3.lib文件生成
lib /定义:sqlite3.def /机:开启
3、当sqlite3_open打开一个数据库,一个数据库文件将如果数据库不存在产生的。如果我们继续执行其他的查询语句,我们会失败,如sqlite3_prepare。在编程中,我们清楚地指定数据库,并有数据库中的数据。查询失败的原因,主要是由于数据库名称错误的道路。一般的方法是检查数据库文件是否存在,如果有一个sqlite3_open打开数据库;否则,创建一个新的数据库。
4。如何建立自动生长场
作为整数主键声明的列将自动增长。
5、什么样的数据类型做sqlite3支持
无效的
整数
真正的
文本
斑点
但事实上,sqlite3也接受下列数据类型:
16位整数的对象。
32位整数的整数。
十进制(P,s)的p和s大小的十进制整数的准确值,p的确切值是指所有的数字(数字)的值,s是指小数点后的位数。如果没有具体指定,系统将被设置为p=5,s=0。
浮点32位的实数。
双64位的实数。
char(n)n长度的字符串,n不能超过254。
一串varchar(n)的长度是不固定的,其最大长度为n,n不超过4000。
图形(n)与char(n)相同,但它的单位是两个字符的双字节,n不能超过127。这种格式被设计用来支持两种字体长度的字体,例如汉字。
Vargraphic(N)与可变长度和最大长度的字符串n倍,n不能超过2000。
日期包含年份、月份、日期。
时间包含小时、分钟、秒。
时间戳包括年、月、日、小时、分钟、秒和1秒/ 1000秒。
6、SQLite允许字符串插入到一个整数字段
这是一个功能,而不是一个bug.sqlite不强制数据类型的限制。任何数据可以插入任何列。你可以插入任何长度的字符串转换成一个整数列,插入一个浮点数转换成布尔列,或插入一个数据类型的值转换为一个字符的列的数据类型,在创建表的规定不限制列中的任何数据的插入。任何列可以接受任意长度的字符串。除一种情况外,标有整数主键的列只能存储64位整数。当它将数据插入这个列时,除了整数外,还会出现错误。
但SQLite使用声明的列式表示你希望的格式,例如,当你插入一个字符串转换成一个整数列,SQLite会尝试将字符串转换为一个整数,如果它可以被转换,它将插入的整数;否则,该字符串将被插入。这一特性有时被称为类型或亲和柱(或柱亲和)。
7。为什么是SQLite不允许使用0和0键键盘上的两行同一桌吗
主键必须是数字类型,将主键更改为文本类型不起作用。
每一行必须有一个唯一的主键,数值列,SQLite认为'0'and '0.0是相同的,因为他们是平等的比较时,为整数(见前面的问题)。所以,这个值不唯一。
8。应用程序的多个应用程序或多个实例可以同时访问同一数据库文件吗
多个进程可以同时打开同一个数据库,多个进程可以同时执行选择操作,但在任何时候,只有一个进程可以更改数据库。
SQLite使用读写锁的控制访问数据库。(在Win95 / 98 /我和其他系统不支持读写锁,使用概率模拟代替。)但要注意,如果数据库文件存储在NFS文件系统,这种锁机制可能无法正常工作。这是因为,fcntl()文件尚未大量NFS妥善执行。当多个进程可以同时访问数据库,您应该避免将数据库文件在NFS。在Windows,微软的文件说:如果你使用FAT文件系统,而不是运行SHARE.EXE守护进程,然后锁不能正常使用。那些在Windows的很多经验告诉我:网络文件的实现文件锁的N有很多错误,它是不可靠的。如果他们说是对的,在两台或多台Windows机器之间共享数据库可能会导致不必要的问题。
我们认识到,没有其他的嵌入式SQL数据库引擎可以处理许多并发像sqlite.sqlite允许多个进程同时打开一个数据库,同时读取数据库。当任何过程要写,它已锁定数据库文件的更新过程,但通常只有几毫秒。其他过程只需要等待写入程序来完成这项工作。通常,其他嵌入式SQL数据库引擎仅允许一个进程连接数据库。
然而,客户/服务器数据库引擎(如PostgreSQL,MySQL或Oracle)通常支持更高级别的并发性,并允许多个进程同时写同一个数据库。这一机制可能在客户/服务器结构的数据库,因为总是有一个单独的服务器进程的控制与协调访问数据库,如果你的应用需要大量的并发性,你应该考虑使用一个数据库的客户/服务器结构。但经验表明,许多应用需要的并发比他们的设计师认为少。
当SQLite试图访问一个文件被其他进程锁定,默认行为是返回sqlite_busy.the sqlite3_busy_handler()或sqlite3_busy_timeout()()API函数可以用C代码来调整这个行为。
9。是SQLite的线程安全
线程是邪恶的,避免使用它们。
SQLite是线程安全的。我们做出了这样的让步,因为很多用户会忽视我们给在最后一段的建议。但是,为了实现线程安全,SQLite必须设置为1的sqlite_threadsafe预处理宏时,它被编译,在windows和linux,所有的已编译好的二进制分布以这种方式建立起来的。如果你不确定你所使用的库是线程安全的,你可以叫sqlite3_threadsafe()接口发现。
10。如何列出在SQLite数据库中所有的表和索引
如果你运行程序的命令行访问你的数据库,你可以得到一个类型。表列出所有表。或者,你可以进入。模式查看整个数据库,包括所有的表的索引。输入这些命令,后面跟着一个像模式匹配,可以限制显示表。
11。有一个已知的SQLite数据库大小限制
Windows和Unix下,最终版本的SQLite可以达到2 41平方字节(2T字节),老版本是31平方的字节(2G字节)2。
SQLite 2.8版限制了一个记录,1m.sqlite版本3的能力对一个记录的容量没有限制。
表名,索引表的名称、视图名称,触发器名称和字段名称没有长度限制。但名字的SQL函数(由sqlite3_create_function创建()API函数)不能超过255个字符。
12。在SQLite中,最长的varchar字段是什么
SQLite不力varchar的长度,你可以声明一个varchar(10)在SQLite和SQLite可以高兴的让你把500字,500字是完整的,它永远不会被截断。
13。在SQLite,如何添加或删除一个表列
SQLite的有限修改表支持。你可以用它在表的末尾添加一列,并更改表的名称。如果更复杂的变化的表结构,表必须重建。重建时,你可以把现有的数据在一个临时表,删除原表,创建一个新表,然后将数据从临时表。
例如,假设有一个带有的t1表
事务的开始;
创建临时表t1_backup(A,B);
插入t1_backup选择,B从T1;
下拉表t1;
创建表t1(a,b);
插入T1选择,B t1_backup;
t1_backup表;
承诺;
14。你在SQLite支持分页
SQLite的分页是世界上最简单的。如果我想去数据的11-20帐表SELECT * FROM帐号限制9偏移10;
上述声明表明,从帐表得到的数据是,跳过10线和9线。这个功能是足够大量的网络媒体网站使用。你也可以写相同的效果作为选择*从账户limit10, 9.this文笔也支持MySQL。