http://iihero.iteye.com/category/151894?show_full=true
解决方法有: 1。使用进程或线程间的同步机制以避免同时操作;如用信号量,互斥锁等(pthread_mutex_lock,pthread_mutex_unlock),如果你的项目工程较大要求较高的话建议用此方法自行封装函数处理同步 2。使用sqlite提供的两个busy handler函数,但对于一个连接来说,只能有一个busy handle,两个函数会相互影响,设置一个的同时会清除另一个,应根据需要来选择。 int sqlite3_busy_handler(sqlite3 *,int (*)(void *,int),void *) 不注册此函数时默认回调函数为NULL,清除busy han ...
如若转载,请加上本文链接,以示尊重个人劳动,谢谢。 PRAGMA语句是sqlITE数据的sql扩展,是它独有的特性,主要用于修改sqlITE库或者内数据查询的操作。它采用与SELECT、INSERT等语句一样的形式来发出请求,但也有几个重要的不同: 1. 特定的PRAGMA语句可能被移走,新的PRAGMA语句可能在新的版本中添加。因此,后向兼容无法保证。 2. 未知的PRAGMA命令不会有错误消息出现,它只是简单的忽略。 3. 有些PRAGMA只在sql的编译阶段起作用,而不是执行阶段。 这意味着如果使用C语言,sqlite3_prepare(),sqlite3_step(),sqlite ...
如若转载,请加上本文链接,以示尊重个人劳动,谢谢。本文严格整理自最新的:http://www.sqlite.org/faq.html,(3.7.8) (多说一句,看一个系统的发布,经常首先要看的就是,readme,新特性,然后就是FAQ列表,即所谓的常见问题列表) 1. 如何创建一个自增字段(autoincrement)? 在sqlite中,创建一个integer primary key,即可让它自增,太变态了。创建了该类型字段以后,即算你插入NULL值,NULL也会自动转为最后一次插入的值+1。最大可能的整数值为9223372036854775807,越过此值后,将会随机生成一个值。 ...
在没有大量阅读sqlite在线文档并且不了解相关配置之前,几分钟的时间可以让你快速了解sqlite. 1. 下载源代码,你总能从http://www.sqlite.org/download.html 这里下载到最新的sqlite发行版本对应的源码。 2. 创建数据库你可以从http://www.sqlite.org/download.html这里下载到sqlite3.exe,也可以直接依据下文: http://iihero.iteye.com/blog/1175595,自己动手编译出该可执行文件。进到cmd窗口,进到sqlite3所在目录,执行sqlite3 <demo.db全路径&g ...
关于sqlite的帮助,直接上http://www.sqlite.org/docs.html看即可。但是它不是单个文件形式的,唯一的好处就是更新比较及时。如果你想看单个chm文件的,可以从我这里下载单个chm文件: http://download.csdn.net/detail/iihero/2890372 至于编译sqlite,如果只是出于学习的目的,完全可以只在windows下编译。我甚至还为此写了一个自动下载并编译的脚本,参看: http://iihero.iteye.com/blog/1175595 脚本里边的wget.exe,7z.dll,7z.exe。前者来源于http:/ ...
使用sqlite也有一段时日了,一直想整理出一份比较完整的sqlite指南,可惜时间总是不够。就从这里开始吧,能写多少就写多少。总特性: 1. sqlite支持事务,满足(ACID)特性:atomic,consistent,isolated,durable。即使在系统crash掉或者掉电的情况下,一样可以恢复。 2. 0配置,不需要安装或者初始化管理即可使用。(不就是嵌入式应用吗?:)) 3. 整个数据库存储在跨平台的磁盘文件里头,何谓跨平台,就是说这个文件放到任意平台上,都可以用相同版本的sqlite打开(这个确实强大,目前,即算商用的大型DBMS,其数据文件也没几个是跨平台的,越大越 ...
sqlite采用的是B+树来存储表中的索引和数据。 B树的键及其值既存储在内部节点上,也存储在叶节点上,所有的叶节点具有相同的深度。 B+树作了些微改变,键和数据会存储到叶节点上,并且按照键值排好序。而内部节点只存储键值。相当于有两条查找路径。 sqlite从根叶开始创建B+树,一般从页1开始。它以独立的页来存储树节点,每页一个节点,这些页要分内部页还是叶子页。对于每个节点,任何项(数据)及其键值组合成一个payload,每页都会预设一个payload值,当实际的payload超过此值时,超出的字节就会填充到溢出页,多余的payload会依次存储到溢出页形成的链表里。内部页和叶子页都可以有溢出 ...
1. 如何创建自增字段? 2. sqlite 支持哪些数据类型? 3. 为什么能向 sqlite 数据库的整型字段中插入字符串? 4. 为什么 sqlite 认为表达式 '0'=='00' 为真? 5. 为什么 sqlite 不允许在同一张表里使用 '0' 和 '0.0' 作为两个不同的行的主键? 6. 为什么不能在 Linux Box 中读取在 SparcStation 中创建的 sqlite 数据库? 7. 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗? 8. sqlite是线程安全的吗? 9. 如何列出一个 sqlite 数据库中的所有的表/索引? 10. sqli ...
使用jdbc测了一下sqlite3的插入数据的效率,使用整体事务与不使用整体事务,差别非常明显。 cpu: 1G,内存:512MB使用整体事务:1000000条记录,需要93秒钟。使用逐个插入提交事务:1秒钟只能处理20条记录。启动程序时把java堆最大空间设大一些,不然可能出现内存不够的异常。java -Xmx256M TestConn测试后的结果显示如下: 以下是测试代码:import java.sql.*; public class TestConn {void test(){Connection conn = null;Statement stmt = null;ResultS ...