iOS 数据库SQLite
来源:互联网 发布:php报名系统 编辑:程序博客网 时间:2024/06/04 19:22
SQLite介绍
SQLite是一款轻型的嵌入式数据库,安卓和iOS开发使用的都是SQLite数据库。
它的特点:
- 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
- 它的处理速度比MySQL、PostgreSQL这两款著名的数据库都还快。
- 它是C语言框架的,跨平台性强。
要在iOS中使用SQLite3,需要在Xcode导入libsqlite3的库
下面是结合SQL语句完成数据库操作,使用到的是下面定义的方法:
创建表:create table 表名称(字段1,字段2,……,字段n,[表级约束])[TYPE=表类型];插入记录:insert into 表名(字段1,……,字段n) values (值1,……,值n);删除记录:delete from 表名 where 条件表达式;修改记录:update 表名 set 字段名1=值1,……,字段名n=值n where 条件表达式;查看记录:select 字段1,……,字段n from 表名 where 条件表达式;
1,打开数据库
使用的C语言函数如下:
/* 打开数据库 */int sqlite3_open( const char *filename, /* 数据库路径(UTF-8) */ sqlite3 **pDb /* 返回的数据库句柄 */);
2,查询数据库
使用的C语言函数:
/* 执行有返回结果的SQL语句 */int sqlite3_prepare_v2( sqlite3 *db, /* 数据库句柄 */ const char *zSql, /* SQL语句(UTF-8) */ int nByte, /* SQL语句最大长度,-1表示SQL支持的最大长度 */ sqlite3_stmt **ppStmt, /* 返回的查询结果 */ const char **pzTail /* 返回的失败信息*/);
3,插入数据
使用的C语言函数:
/* 执行有返回结果的SQL语句 */int sqlite3_prepare( sqlite3 *db, /* 数据库句柄 */ const char *zSql, /* SQL语句(UTF-8) */ int nByte, /* SQL语句最大长度,-1表示SQL支持的最大长度 */ sqlite3_stmt **ppStmt, /* 返回的查询结果 */ const char **pzTail /* 返回的失败信息*/);
4.删除数据库
使用的C语言函数:
/* 执行没有返回的SQL语句 */int sqlite3_exec( sqlite3 *db, /* 数据库句柄 */ const char *sql, /* SQL语句(UTF-8) */ int (*callback)(void*,int,char**,char**), /* 回调的C函数指针 */ void *arg, /* 回调函数的第一个参数 */ char **errmsg /* 返回的错误信息 */);
5, 关闭数据库
使用的C语言函数:
/* 关闭数据库 */int sqlite3_close(sqlite3 *db);
下面来个小例子:
这里请求数据是微博的用户名和id 定义一个模型
DataModel.h
#import <Foundation/Foundation.h>@interface DataModel : NSObject@property (nonatomic, copy) NSString *screen_name;@property (nonatomic, copy) NSString *avatar_hd;- (instancetype)initWithDictionary:(NSArray *)dictionary;@end
DataModel.m
#import "DataModel.h"@implementation DataModel- (instancetype)initWithDictionary:(NSDictionary *)dictionary { if (self = [super init]) { // 当有很多属性 一个一个的写 太麻烦了, // 一句话搞定 [self setValuesForKeysWithDictionary:dictionary]; } return self;}// 一般情况下 请求数据回来,里面包含很多数据,要一个一个的写,写错了一个就报错// 请求数据回来有很多,但你又用不上,就写上这个方法- (void)setValue:(id)value forUndefinedKey:(NSString *)key { // 打印的是 你没用到的key NSLog(@"%@",key);}@end
在定义一个处理数据库的类 DataBase
DataBase.h
#import <Foundation/Foundation.h>/** 导入DataModel*/#import "DataModel.h"@interface DataBase : NSObject/** 打开数据库*/+ (void)openDB;/** 查*/+ (NSArray *)find;/** 插*/+ (BOOL)insertModel:(DataModel *)dataModel;+ /** 删除*/+ (BOOL)deleteModel:(DataModel *)dataModel;@end
DataBase.m
#import "DataBase.h"// 导入#import <sqlite3.h>@implementation DataBase// 创建一个数据库对象static sqlite3 *db;#pragma mark - 打开数据库+ (void)openDB { // 将导入的数据库移动到 Documents 文件夹下 // 首先要在外面创建一个数据库 把数据库导入工程里面 "这一步 一定要做" // 拿到数据库的路径 // 这里 WeiBo 是创建数据库的名称 (千万不要搞错) NSString *originPath = [[NSBundle mainBundle] pathForResource:@"WeiBo" ofType:@"sqlite"]; // Documents 文件夹下的路径 然后进行拼接 NSString *targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"collection.sqlite"]; NSFileManager *manager = [NSFileManager defaultManager]; if (![manager fileExistsAtPath:targetPath]) { [manager moveItemAtPath:originPath toPath:targetPath error:nil]; } char *filename = (char *)[targetPath UTF8String]; // 打开数据库 int result = sqlite3_open(filename, &db); if (result == SQLITE_OK) { NSLog(@"数据库开启成功"); } else { NSLog(@"数据库开启失败"); }}#pragma mark - 查+ (NSArray *)find { NSMutableArray *mArray = [NSMutableArray array]; // 打开数据库 [self openDB]; // 声明一个陈述 sqlite3_stmt *stmt = nil; // 查表 // 这里 weiBo 是创建数据库下的表名称 (千万不要搞错) const char *sql = "select *from weiBo"; // 将sql 文本转成一个 语句对象 int result = sqlite3_prepare_v2(db, sql, -1, &stmt, nil); if (result == SQLITE_OK) { NSLog(@"准备查询成功"); while (sqlite3_step(stmt) == SQLITE_ROW) { // 提取数据 const char *screen_name = (const char *)sqlite3_column_text(stmt, 0); const char *avatar_hd = (const char *)sqlite3_column_text(stmt, 1); DataModel *dataModel = [[DataModel alloc] init]; dataModel.screen_name = [NSString stringWithCString:screen_name encoding:4]; dataModel.avatar_hd = [NSString stringWithCString:avatar_hd encoding:4]; //"NSNumber 类型 " [NSNumber numberWithInteger:[[NSString stringWithCString:deal_id encoding:4] integerValue]]; [mArray addObject:dataModel]; } } return mArray;}#pragma mark - 插+ (BOOL)insertModel:(DataModel *)dataModel { // 打开数据库 [self openDB]; sqlite3_stmt *stmt = nil; // 这里 weiBo 是创建数据库下的表名称 (千万不要搞错) const char *sql = "insert into weiBo(screen_name, avatar_hd) values(?, ?)"; // 将 sql 文本转换成一个 语句对象 int result = sqlite3_prepare(db, sql, -1, &stmt, nil); if (result == SQLITE_OK) { //将要插入的数据插入到数据库 sqlite3_bind_text(stmt, 1, [dataModel.screen_name UTF8String], -1, nil); sqlite3_bind_text(stmt, 2, [dataModel.avatar_hd UTF8String], -1, nil); //[NSNumber] sqlite3_bind_text(stmt, 1, [[NSString stringWithFormat:@"%@",model.comment_num] UTF8String], -1, nil); if (sqlite3_step(stmt) == SQLITE_DONE) { flag = YES; } } return flag;}#pragma mark - 删 + (BOOL)deleteModel:(DataModel *)dataModel { BOOL flag = NO; // 打开数据库 [self openDB]; // 这里 weiBo 是创建数据库下的表名称 (千万不要搞错) NSString *sql = [NSString stringWithFormat:@"delete from weiBo where screen_name = %@", dataModel.screen_name]; int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil); if (result == SQLITE_OK) { NSLog(@"删除成功"); flag = YES; } else { NSLog(@"删除失败"); } return flag;}@end
创建数据库
(用火狐浏览器)
1,SQLite Manager下载
2,创建数据库有几种方法(这理就不一一介绍了) 我的是火狐浏览器里面的数据库
打开浏览器 –> 工具 –> 找到SQLite Manager
3,点击:SQLite Manager 页面是这样
4,创建数据库
5,桌面 把它拖到工程中
6,创建数据库的表(表里面创建字段 可以理解为属性)
7,表创建成功后
图片截的有点模糊 请见谅 。
有问题请留言.
哪里写错了请指导指导 谢谢…..
0 0
- ios访问sqlite数据库
- iOS sqlite数据库
- IOS开发数据库sqlite
- IOS sqlite数据库操作
- IOS sqlite数据库操作
- iOS中的SQLite数据库
- IOS数据库操作(Sqlite)
- iOS-SQLite数据库
- iOS-SQLite数据库使用
- iOS-SQLite数据库(CRUD)
- IOS-SQLite数据库操作
- ios SQlite操作数据库
- iOS开发数据库, sqlite,
- iOS sqlite 数据库加密
- iOS--sqlite数据库(举例)
- iOS数据库sqlite应用
- iOS编程------SQLite / 数据库
- iOS数据库Sqlite
- Android ScrollView中控件顶部悬浮
- [Android] Material 风格的 Dialog 的使用
- MySQL ROLLUP和CUBE问题
- java并发系列:深入分析Synchronized
- SDTM: AETERM, AESOC, AEDECOD导出到SDTM/TFL中的条件
- iOS 数据库SQLite
- 记一次线上应用连接池满的处理
- c语言文件操作
- android图片压缩质量参数Bitmap.Config RGB_565 ARGB_8888
- ionic react-native和native开发移动app
- eclipse 逆向工程生成hibernate实体类(注解或配置文件)
- iOS UITextField控件
- centos、linux安装vpn
- C++中new和delete的用法