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

 1. 打开sqlite3数据库

SQLITE_API int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);

SQLITE_API int sqlite3_open16(
  const void *filename,   /* Database filename (UTF-16) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);

SQLITE_API int sqlite3_open_v2(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb,         /* OUT: SQLite db handle */
  int flags,              /* Flags */
  const char *zVfs        /* Name of VFS module to use */
);

参数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对象指针;并且之前没有关闭; 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值