在SQLite数据库中,常用的函数包括数据库的创建、关闭和操作等。这些常用函数在执行后会根据执行的情况返回不同的code(返回码),这样开发者就可以根据这些返回码给应用提供信息来判断当前数据库操作的情况。表20.1.1罗列了这些函数的常用返回码,在将来的开发调试中或许会用到。
表20.1.1 SQLite函数的常用返回码
(续上表)
SQLite提供了三个打开函数,第一个打开函数是:
此函数主要完成数据库的创建和打开,第一个参数是数据库的文件路径,第二个参数是数据库打开完成的实例指针。如果路径中没有数据库文件,此函数将尝试创建文件。数据库文件存在之后,此函数就会去尝试打开数据库,这些操作都在这个函数中进行。打开成功之后,第二个参数传入的指针引用会指向打开的数据库实例;如果不成功,则会有相应的返回码。新创建的数据库将会使用默认的UTF-8编码。
第二个打开函数是:
它与第一个函数的区别在于默认使用UTF-16编码。
第三个打开函数是:
sqlite3_open_v2()函数比sqlite3_open()函数多了两个参数。其中flags参数是用于设置数据库打开方式的,可以是“SQLITE_OPEN_READONLY”“SQLITE_OPEN_READWRITE”“SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE”这三个flag中的一个,还能和“SQLITE_OPEN_NOMUTEX”“SQLITE_OPEN_FULLMUTEX”“SQLITE_OPEN_SHAREDCACHE”“SQLITE_OPEN_PRIVATECACHE”“SQLITE_OPEN_URI”这几个flag结合使用。前三个flag指定了数据库的访问权限是只读还是读写,是否自动创建数据库文件;后面的flag指定打开数据库的连接方式是多线程还是单线程,是否共享缓存等。而zVfs参数则是用来指定使用的VFS的模块名字的,如果设置为NULL则会有默认的sqlite3_vfs的实例被使用。
数据库被打开之后,还需要关闭。SQLite提供了两个用于关闭数据库的函数,第一个是:
这个函数传入一个数据库的实例指针,然后尝试将此指针指向的数据库连接关闭。如果此时数据库还处于未终止的准备状态或者还有未终止的备份实例,函数将继续保持数据库的连接并且用SQLITE_BUSY作为返回码告诉调用者。如果想在调用方法之后自动地将数据库连接关闭,可以使用另一个函数:
这个函数在iOS 8.2之后可以使用,调用这个方法时开发者无须关心数据库当时的状态,函数会在准备状态结束或者备份完成之后自动将数据库连接关闭。
数据库的连接建立了之后,就要开始准备执行的SQL语句。SQLite提供了四个准备函数,第一个准备函数是:
(www.xing528.com)
这个函数将SQL语句转换为一个准备语句对象,可以传入指针的引用来获取这个对象,传入参数包括已经连接的数据库指针db,以及需要执行的SQL语句zSql。nByte这个参数用于指定函数读取zSql中最大的字节数,如果nByte小于0,则函数读取zSql中从开始到第一个0终止符的内容;如果nByte大于0,则它是从zSql读取的字节数;如果nByte为0,则不生成准备语句对象。pzTail参数则是zSql在遇见终止符或者是达到设定的nByte结束之后剩余的内容,这些内容被存放到pZTail所指向的指针中,不包括终止符。ppStmt参数则用于存储将被用于sqlite3_step()函数的编译好的准备语句对象的指针,如果发生错误,它将被置为NULL,比如输入的文本不是一个SQL语句,在使用完成之后需要调用sqlite3_finalize()删除它,执行成功后会返回一个SQLITE_OK。
第二个准备函数是:
它的传入参数与第一个函数一模一样,区别在于v2是更为推荐的版本。这个版本的函数在返回准备语句对象时将原始的SQL语句附上。如果在sqlite3_step()函数之前发生了数据库结构的变动,那么sqlite3_step()函数将尝试再次编译SQL语句并且尝试执行它,如果此时仍有错误才返回错误信息。
第三个准备函数是:
它是第一个准备函数的UTF-16版本,也就是使用在UTF-16编码的数据库。
第四个准备函数是:
它是第二个准备函数的UTF-16版本,也就是使用在UTF-16编码的数据库。
在生成一个准备语句对象之后,我们可以调用如下函数:
此函数用于执行SQL语句,传入之前生成好的准备语句对象。函数的返回值则基于生成sqlite3_stmt参数所使用的函数,假如使用老版本的接口sqlite3_prepare()和sqlite3_prepare16(),返回值会是SQLITE_BUSY、SQLITE_DONE、SQLITE_ROW、SQLITE_ERROR 或SQLITE_MISUSE;而v2版本的接口sqlite3_prepare_v2()和sqlite3_prepare16_v2()则会同时返回这些结果码和扩展结果码。
对所有SQLite 3.6.23.1以及其之前的版本,需要在sqlite3_step()之后调用如下函数:
如果调用sqlite3_reset重置准备语句失败,将会导致sqlite3_ step()调用返回SQLITE_MISUSE,但是在SQLite 3.6.23.1以后的版本中,sqlite3_step()将会自动调用sqlite3_reset。
除了使用sqlite3_step(),也会经常用到sqlite3_exec()函数。该函数主要用于执行SQL语句,特别是数据操作,如果不涉及检索数据,就可以使用此函数:
在这个函数中,第一个参数是前面sqlite3_open()函数得到的指针;第二个参数sql是一条SQL语句,以0终止符作为结束;第三个参数用于传入回调函数,这条语句执行之后,SQLite3会调用提供的回调函数;第四个参数void*是为callback提供的第一个参数,可以传递任何一个指针参数;第五个参数char **errmsg用于回传错误信息,注意是指向指针的指针。SQLite3里面有很多固定的错误信息,在实际使用中,通常第三个参数和第四个参数都可以输入NULL,输入NULL表示不需要回调。例如,进行insert操作或进行delete操作就没有必要使用回调;而当进行select操作时,就要使用回调函数,因为SQLite3把数据查出来之后需要通过回调函数返回所查出的数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。