[Sqlite-数据库连接句柄]

typedef struct sqlite3 sqlite3;

每一个SQLite数据库都是通过一个指向不透明的名为“sqlite3”的结构体指针来代表的,我们可以将sqlite3看作是一个指针,函数 sqlite3_open(), sqlite3_open16()和sqlite3_open_v2()作为构造函数的接口,函数sqlite3_close(), sqlite3_close_v2()作为析构函数的接口,同时也有很多的其他的接口,但是主要的就是这几个函数。

构造函数1:sqlite3_open()

打开一个数据库连接

int sqlite2_open(
	const char *filename,	//UTF-8类型的数据库名称
	sqlite3 **ppDb	//数据库操作的句柄
);

int sqlite3_open16(
	const void *filename,	//UTF-8类型的数据库名称
	sqlite3 **ppDb	//数据可以的操操作句柄
);

int sqlite3_open_v2(
	const char *filename,	//UTF-8类型的数据库名称
	sqlite3 **ppDb,		//数据库的操作句柄
	int flags, 		//标志位
	const char *zVfs	//所使用的的VFS模型的名字
);

使用这种方式打开一个数据库是将一个文件名作为数据库名称,这个文件名如果是UTF-8编码的话,就是用sqlite3_open()和sqlite_open_v2()函数,如果是UTF-16的话,就是用sqlite3_open16()函数,数据的连接通常是使用 ppDb的方式返回,即使出现了一个错误,唯一的期望是如果SQlite未能给sqlite3对象分配一个空间,空指针将会代替ppDb作为返回值,如果数据库正常的打开,将会返回SQLITE_OK,否则就返回一个故障码
error_code
,函数sqlite3_errmsg()sqlite3_errmsg()可以将返回的故障代码转化成英语
默认的数据库的编码格式是UTF-8d的,而且是由函数sqlite3_open()和函数sqlite3_open_v2()创建的,sqlite3_open16()是使用UTF-16编码的
如果数据库是否被成功的打开,数据库的连接必须使用函数sqlite3_close()来关闭连接
函数sqlite3_open_v2()的接口可slqite3_open()的接口是很相似的,只不过断了2个附加的参数,函数sqlite3_open_v2()的标志位将使用下面的几个值,可以在SQLITE_OPEN_NOMUTEX(不带互斥),
SQLITE_OPEN_FULLMUTEX
(使用全部互斥),SQLITE_OPEN_SHARECACHE(共享缓存),SQLITE_OPEN_PRIVATECACHE(私有缓存),或者使用SQLITE_OPEN_URI标志位

  • SQLITE_OPEN_READONLY
    数据库将只用只读的方式打开,如果数据库不存在,将返回一个故障码

  • SQLITE_OPEN_READWRITE

    数据库将使用读写的方式打开,如果文件被操作系统所保护的话,就只读,换句话说,数据库一定要存在,否则就会返回一个故障

  • SQLITE_OPEN_READWRITE
    |
    SQLITE_OPEN_CREATE

    数据库将使用读写的方式打开,如果数据库不存在,将会创建一个数据库,这个方式通常使用在sqlite3_open()函数和sqlite3_open16()函数中

如果函数sqlite3_open_v2()的第三个参数不是上面定义的几个选项的参数,则后果是不会预估的
如果 SQLITE_OPEN_NOMUTEX 标志位设置以后,然后,只要在编译时或启动时没有设置单线程模式,数据库连接就会以多线程模式打开。如果选择了 SQLITE_OPEN_FULLMUTEX 标志位,除非在编译或者运行阶段设置了单线程模式,则数据库将会以序列的方式来创建,SQLITE_OPEN_SHARECACHE 将会使数据库使用共享缓存模式,不管数据库是否使用了共享缓冲模式,标志位 SQLITE_OPEN_PRIVATECACHE 将会是数据库的连接不在共享缓存模式
函数sqlite3_open_v2()的第四个参数是
sqlite3_vfs
,它定义了新数据库连接的时候所使用的操作系统的接口,如果是NULL,则将会使用默认的sqlite3_vfs对象
如果文件名是":memory:",然后一个私有的,内部储存的数据库将会为了这个连接而创建,如果数据库连接成功,这个临时的内部存储数据库将会凶案是,后面开发的SQLIte版本将会使用附件的特殊文件名,它以":“开头,建议如果数据库不是以“:”开头的话,应该在文件名的开头加一个比如”./"的前缀
如果文件名是一个孔子字符串,临时的在磁盘的数据库将会穿件,这个私有的数据库将会在数据库断开连接后自动的删除

URI Filenames

如果URI文件名的解析功能使能以后,并且文件名的解析从"file:"开始,这个文件名将会作为一个URI来解析,如果SQLITE_OPEN_URI标志位在函数sqlite3_open_v2()中给定,或者在函数sqlite3_config()中使用SQLITE_CONFIG_URI标志位使能了全局URI文件名解析,则URI文件名解析将会使能,URI文件名解析默认情况下是关闭的,但是后面开发的新版的数据库可能会默认情况下使能URI文件名解析。
URI文件名是根据RFC 3986解析的,如果URI中包含一个文件的所有权者,它就不能是空的字符串或是字符串“localhost”,如果所属人不是空或者不是字符串“localhost”,将会报故障,判断构成了URI,如果出现了,就会忽视
SQLite使用路径来构成URI的名称,这个路径在硬盘中将会包含数据库,如果路径是由’/‘开始的,他将会季锡成一个绝对路径,如果不是以’/'开头,将会解析成一个相对路径,在Window中,第一个名字是绝对的cup按路径
疑问组成的URI解析将会包含SQLite自己,或者通过一个定制的VFS解析,SQLite和内部的的VFSes解析警徽遵循以下参数

  • vfs: vfs参数制定了操作系统的接口的路径,可以用来访问磁盘中的数据库,如果这个选项是一个空的字符串,可能导致意向不到的效果,如果函数sqlite3_open_v2()使用了vfs选项,然后VFS选项将会优先作为你函数sqlite3_open_v2()的第4个参数
  • mode: 模式参数将会从4个选项中选择"ro", “rw”, “rwc”, 或者"memory",如果选择其他的参数们将会报错,如果没有指定,数据库将默认使用制度的方式打开,和SQLITE_OPEN_READONLY参数设定后的表现是昂通的,如果模式选择为"rw",则数据库将会使可读写的方式打开,但是这种方式不能够创建,如果设置为"rwc",将会以读写创建的方式来进行数据库的连接
  • cache:缓存参数可以设置为“共享”或者“私有”模式,设置为共享模式的情况下相当于设置标志位为“SQLITE_OPEN_SHAREDCACHE”,设置为私有相当于
  • psow: 这个参数决定了是否是powersafe的,这个参数是指硬盘没有电的时候是否是安全的能够将数据保存下来
  • Nolock
  • immutable
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值