当前位置:   article > 正文

sqlite3数据库API-打开关闭(二)_sqlite3_open_v2

sqlite3_open_v2

 1. 打开sqlite3数据库

  1. SQLITE_API int sqlite3_open(
  2. const char *filename, /* Database filename (UTF-8) */
  3. sqlite3 **ppDb /* OUT: SQLite db handle */
  4. );
  5. SQLITE_API int sqlite3_open16(
  6. const void *filename, /* Database filename (UTF-16) */
  7. sqlite3 **ppDb /* OUT: SQLite db handle */
  8. );
  9. SQLITE_API int sqlite3_open_v2(
  10. const char *filename, /* Database filename (UTF-8) */
  11. sqlite3 **ppDb, /* OUT: SQLite db handle */
  12. int flags, /* Flags */
  13. const char *zVfs /* Name of VFS module to use */
  14. );

参数1filename:指定的sqlites数据库文件;对于sqlite3_open()和sqlite3_open_v2() ,filename参数被解释成UTF-8; 对于sqlite3_open16(),则被解释成UTF-16;

参数2:数据库句柄通过*ppDb返回,即使发生了一些错误;

若sqlite无法分配内存来保存sqlite3对象,*ppDb将被写入NULL,而不是指向sqlite3对象的指针;

返回值:成功打开(创建)数据库,返回SQLITE_OK;否则返回错误代码;可用sqlite3_errmsg()或sqlite3_errmsg16()获取失败后的错误英文描述;

sqlite3_open_v2()接口工作原理类似sqlite3_open(),只是它接收两个附加参数;用于对新的数据库连接进行附加控制;sqlite3_open_v2()的flags参数必须至少包含以下三个标志组合之一;

#define SQLITE_OPEN_READONLY         0x00000001  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_READWRITE        0x00000002  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_CREATE           0x00000004  /* Ok for sqlite3_open_v2() */

 除了上述必须的标志,还支持以下可选标志:

#define SQLITE_OPEN_URI              0x00000040  /* 可以将文件名解释为URL */
#define SQLITE_OPEN_MEMORY    0x00000080  /* 数据库将作为内存中的数据库打开 */
#define SQLITE_OPEN_NOMUTEX   0x00008000  /* 允许不同的线程同时使用SQLite,只要每个线程使用不同的数据块连接 */
#define SQLITE_OPEN_FULLMUTEX  0x00010000  /* 多个线程可在同一时间安全的使用同一个数据库连接(互斥锁将阻塞任何实际并发,但在这种模式下,尝试一下没有坏处)*/
#define SQLITE_OPEN_SHAREDCACHE  0x00020000  /* 启用共享缓存*/
#define SQLITE_OPEN_PRIVATECACHE     0x00040000  /* 数据库被打开并禁用共享缓存*/

sqlite3_open_v2()第四个参数是sqlite3_vfs对象的名称;若为NULL,则使用默认的sqlite3 vfs对象;

 

2. 关闭数据库

无论打开数据库连接句柄时是否发生错误,但不在需要该句柄时,都应该通过将其传递给sqlite3_close()来释放该数据库连接句柄相关的资源;

调用sqlite3_close()和sqlite3_close_v2()返回SQLITE_OK表示sqlite3对象被成功销毁和所有关联的资源被释放;

       理想情况下,应用程序应该尝试关闭sqlite3对象前完成所有准备好的语句,关闭所有BLOB句柄,并完成与sqlite3对象关联的所有sqlite3_backup对象;(a)若数据连接未完成上述情况,那么若调用sqlite3_close()将使数据库连接保持打开并返回SQLITE BUSY;(b) 若数据连接未完成上述情况,那么若调用sqlite3_close_v2()接口,它将返回SQLITE_OK,但不会立即释放数据库连接,而是将数据库连接标记为不可用的"僵尸",等待所有完成后自动释放数据库连接;

如果sqlite3对象在事务打开时被销毁,则事务将自动回滚;

sqlite3_close(C)和sqlite3_close_v2(C)参数C一定要是NULL或者从sqlite3_open(),sqlite3_open16(),或者sqlite3_open_v2()获取的sqlite3对象指针;并且之前没有关闭; 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/490920
推荐阅读
相关标签
  

闽ICP备14008679号