SQLite学习笔记(4)
关于设计与概念(对前面来转载自MRDB前辈的文章)的补充: 注意预查询几个比较重要的c API函数:sqlite3_prepare_v2( );sqlite3_step( ); sqlite_finalize( )。
临时存储器: 查询处理的重要组成部分。RAM或者一个简单的文件,由编译指示命令temp_store来选择,在选择基于文件的存储时,通过temp_store_directory来,明确表示在哪里创建存储文件。
占位符的使用: 默认使用null。 封装查询的几个函数:sqlite3_exec( ) ;sqlite3_get_table( ) ; 前一个函数不返回数据,第二个函数返回数据,还有就是内存占用比较大。 错误处理: sqlite_error 和 sqlite_busy。 注意错误处理:sqlite_errcode( ) ; sqlite_errmsg( ) 。 sqlite语句格式化: 注意 sqlite3_mprintf( ) 及其函数文档; 在这里可能会发生SQL注入攻击。 从备份中恢复数据库。 可操作的控制: 功能由回调函数实现: sqlite3_commit _hook( ),sqlite3_rollback_hook( ) ; sqlite_update_hook ( ) ;分别监视提交、回滚、更新。还有一个wal_hook( ) 的钩子函数,与一般的钩子函数不太一样。 重点:sqlite3_authorizer( ) 钩子函数,这个函数是比较重要的钩子函数。提供很强的对数据库控制的细粒度控制,限制功能操作比较强。 使用线程: 共享缓存模式。 创建用户自定义函数: sqlite3_create_function( )函数的应用; 可以将用户自定义函数嵌入到check约束中。 创建用户自定义聚合: 主册, 实现, 调用。 创建用户自定义排序: 函数sqlite3_create_collation( ) ; 三种排序规则:binary 、 nocase 、rtrim 。 读事务和写事务: sqlite在数据库文件中有着三种不同的文件锁:保留字节、待定字节和一个共享区域。 繁忙处理: 做些其他的事情。小心蛮力的使用。
锁与网络文件系统: SQLite依赖于文件管理系统并发使用的锁。不论什么样的文件试听,SQLite使用相同的锁机制。
finalizer()函数: 事务或者锁定的边界,它们开始事务,结束事务。获取锁,释放锁。
共享缓存模式: 关于单个线程中多个连接同时进行的问题。 该模式下,可以创建一个线程的共享相同页面缓存的多个连接。改组连接可以在同时同数据库中有多个读操作和一个写操作,但是都只是单纯的限制在本线程内,线程之间不能分享。 共享缓存模式是专门为某种情况下,需还要保留内存同时以后稍高并发的嵌入式服务器设计的。
应该记住的是: 核心API围绕两个基本的用于执行SQL命令的数据结构:链接和语句。 命令执行的三个步骤:编译、执行、完成。 sqlite的封转函数exec()和get_table( )将这三步封装为一个函数调用,自动处理相关联的语句对象。 API扩展提供了三种不同的自定义SQLite的方式:用户自定义函数、用户自定义聚合、用户自定义排序规则。 重点在于: SQLite对于事物和锁的管理,事物和锁如何在后台工作的,如何与代码混合使用等。
---------------------------------分--------------------------割-------------------线------------------------------------------------- (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |