首页 > 代码库 > iOS sqlite
iOS sqlite
使用sqlite数据库
我想写一篇文章来将数据库基础的东西整理一下,作为新手,学过去不用马上就会忘了,我想忘了的时候拿出来一看就能懂,马上回忆起来。
xcode库:
在sqlite操作的类中需要导入
#import <sqlite3.h>
sqlite数据类型
- integer 带符号的整数类型;
- real 浮点类型
- text 字符串类型
- blob 二进制大对象类型,能够存放任何二进制数据。
static sqlite3 *sqliteDB; NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"baidumap.sqlite"];//将数据库放在该目录下 sqlite3_stmt *stmt;//语句对象
sqlite3_stmt语句对象(数据库操作语句的对象,用来操作sql语句的)
int result = sqlite3_open(filename.UTF8String, &sqliteDB);
int result = sqlite3_exec(sqliteDB, sqlchar, NULL, NULL, &errorMesg);
sqlite3_close(sqliteDB);
sqlite3_prepare_v2函数预处理sql语句。
预处理的目的是将sql编译成二进制代码,提高sql语句的执行速度。
第一个参数是sqlite3数据库,第二个参数是sql语句,第三个参数是sql语句字符串的长度(填写-1即可),第四个参数是sqlite3_stmt指针的地址,第五个参数是sql没有执行的部分语句。
int result = sqlite3_prepare_v2(sqliteDB, sql , -1, &stmt, NULL);
sqlite3_bind_text函数用来绑定文本参数。(如果sql语句中带有?,则这个问号为占位符,就需要词函数来绑定参数)
sqlite3_bind_int函数用来绑定整型参数。
sqlite3_bind_double函数用来绑定浮点参数。
sqlite3_bind_blob函数用来绑定二进制参数。
。。。。。。
第一个参数是sqlite3_stmt指针的类型的参数,第二个参数为序号(从1开始),第三个参数为字符串,第四个是字符串的长度,第五个参数是一个函数指针。
sqlite3_bind_text(stmt, 1, startime.UTF8String, -1, NULL);
sqlite3_step函数执行sql语句,遍历结果集。(例如查询语句查询出20条数据后,需要用该函数来一条一条的遍历取出)
参数为sqlite3_stmt指针,返回int类型;
sqlite3_step(stmt)
下面是一类函数用来取值(例如取出当前这行数据中得第n个字段中得值需要用到此函数)
sqlite3_column_text 函数提取第n个字段中的字符串数据。
sqlite3_column_blob 函数提取第n个字段中的二进制数据。
sqlite3_column_double 函数提取第n个字段中的浮点型数据。
sqlite3_column_int函数提取第n个字段中的整型数据。
sqlite3_column_int64 函数提取第n个字段中的64位整型数据。
sqlite3_column_text16 函数提取第n个字段中的长度为16的text数据。
NSNumber *latitude = [NSNumber numberWithFloat: sqlite3_column_int(stmt, 0)]; NSNumber *longetude = [NSNumber numberWithFloat: sqlite3_column_int(stmt, 1)];
sqlite3_finalize 函数用来删除sqlite3_stmt 对象(当上文中声明了sqlite3_stmt对象时调用)
sqlite3_finalize(stmt);
例子
下面附加上一个查询函数用来总结一下这些函数总的用法
+ (NSMutableArray *)query:(NSString *)startime :(NSString *)endtime { //打开数据库 NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"baidumap.sqlite"]; int result = sqlite3_open(filename.UTF8String, &sqliteDB); if (result == SQLITE_OK) { NSLog(@"打开数据库成功"); //sql语句 NSString *sqlstr = @"SELECT latitude,longetude FROM location_record WHERE time > ? AND time < ?"; //类型转换 const char *sql = sqlstr.UTF8String; //初始化语句对象 sqlite3_stmt *stmt; //sql语句预处理 result = sqlite3_prepare_v2(sqliteDB, sql , -1, &stmt, NULL); //初始化查询结果语句 NSMutableArray *locationArray = [NSMutableArray array]; if (result == SQLITE_OK) { //对sql语句中的?进行参数绑定 sqlite3_bind_text(stmt, 1, startime.UTF8String, -1, NULL); sqlite3_bind_text(stmt, 2, startime.UTF8String,-1 , NULL); while (sqlite3_step(stmt) == SQLITE_ROW) { //获取字段值 NSNumber *latitude = [NSNumber numberWithFloat: sqlite3_column_int(stmt, 0)]; NSNumber *longetude = [NSNumber numberWithFloat: sqlite3_column_int(stmt, 1)]; //保存到数组 [locationArray addObject:latitude]; [locationArray addObject:longetude]; } } //删除语句对象 sqlite3_finalize(stmt); //关闭数据库 sqlite3_close(sqliteDB); return locationArray; } else { NSLog(@"打开失败"); //关闭数据库 sqlite3_close(sqliteDB); return nil; } }
iOS sqlite