SQLite入门:1-数据库的操作
对于简单的数据,我们完全可以使用Plist来存取数据。随着数据逐渐变大,查询数据和修改数据就会变得越来越麻烦。另外,使用Plist来存取数据无法解决的一个问题是,每次查询数据需要将整个文件都加载到内存中,如果文件很大这显然是不合适的。此时,我们就需要使用到SQLite。
SQLite是一个数据库引擎,无需服务端支持即可直接运行在客户端上。SQLite使用非常广泛,在每一台iOS设备,Android设备,Mac电脑,Windows10上面都能使用SQLite。就像其他数据库一样,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接,并且SQLite 直接访问其存储文件。
数据类型
存储在SQLite数据库中的数据具有以下几种存储类型。
| 存储类型 | 描述 |
| --- | --- |
| NULL | 值是一个 NULL 值。 |
| INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 |
| REAL | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 |
| TEXT | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
| BLOB | 值是一个 blob 数据,完全根据它的输入存储。 |
导入SQLite
在开发过程中,如果我们希望使用SQLite,则需要预先导入SQLite的库文件。
首先创建一个Single View Application工程,在工程的TARGETS中选择Build Phases选项,在Link Binary With Libraries中添加libsqlite3.dylib到工程中。在添加的过程中,我们会发现存在libsqlite3.dylib和libsqlite3.0.tbd。这两者的区别是:libsqlite3.dylib总是链向最新的libsqlite库,目前最新的是libsqlite3.0。也就是说如果以后有libsqlite3.1.tbd,则链向的是libsqlite3.1.tbd。
在程序需要使用SQLite的类中添加头文件。
#import <sqlite3.h>
#创建数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。
现在我们来创建一个SQLite数据库。
- 在控制器类中添加一个sqlite3类型的属性
@interface ViewController ()
@property (nonatomic, assign) sqlite3 *db;
@end
- 在ViewController.m中,添加如下的方法,用户创建一个SQLite数据库
- (BOOL)openDatabaseWithName:(NSString *)databaseName {
NSString *docsDir = nil;
NSArray *dirPath = nil;
// 获取文档目录路径
dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPath objectAtIndex:0];
// 拼接数据库路径
NSString *databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: databaseName]];
NSFileManager *fileManager = [NSFileManager defaultManager];
const char *dbPath = [databasePath UTF8String];
if (![fileManager fileExistsAtPath: databasePath ]) {
if (sqlite3_open(dbPath, &_db) == SQLITE_OK) {
NSLog( @"数据库 打开/创建 成功:%@", databasePath);
return YES;
}
else {
NSLog( @"数据库 打开/创建 失败:%@", databasePath);
return NO;
}
}else{
NSLog(@"数据库已创建: %@", databasePath);
if (sqlite3_open(dbPath, &_db) == SQLITE_OK) {
NSLog( @"数据库 打开/创建 成功:%@", databasePath);
return YES;
}
else {
NSLog( @"数据库 打开/创建 失败:%@", databasePath);
return NO;
}
return YES;
}
}
我们可以在viewDidLoad方法中执行这个方法,会有以下的输出结果。
- (void)viewDidLoad {
[super viewDidLoad];
[self openDatabaseWithName:@"99iOS.sqlite"];
}
我们打开应用程序的沙盒路径,可以查看已经创建的数据库文件。
在上面的代码中,函数sqlite3_open用来创建/打开一个数据库。如果dbPath路径上有数据库则打开,没有则新建一个数据库,并把值赋给db指针。该函数有一个输入参数filename和一个输出函数ppDb。
SQLITE_API int SQLITE_STDCALL sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
在对数据库操作完成之后记得要执行sqlite3_close函数关闭数据库,来回收系统资源。
- (void)closeDB {
if (NULL == _db) {
NSLog(@"数据库不存在");
} else {
sqlite3_close(_db); // 关闭数据库
}
}
示例代码
https://github.com/99ios/13.5.1
最后编辑时间为: September 26th , 2017 at 06:10 am
本文由 99ios 创作,转载请注明出处