您的位置:首页 > 产品设计 > UI/UE

UI进阶——SQL数据库

2016-03-16 20:15 651 查看

一、IOS开发中支持sqlite3轻量级数据库

在使用数据库之前,需要导入数据库相关的包。



在这里,我们封装一个数据库对象来操作数据库:

创建单例:

//单例
+(DataBaseHelper *)ShareSingleton{

static DataBaseHelper* dataBaseHelper = nil;

@synchronized(self) {
if (dataBaseHelper == nil) {
dataBaseHelper = [[DataBaseHelper alloc]init];
}
}

return dataBaseHelper;
}


//创建数据库路径
-(void)dataBasePathWithName:(NSString*)fileName{

//首先判断文件是否包含后缀名
if (![fileName containsString:@".sqlite"]) {
fileName = [fileName stringByAppendingString:@".sqlite"];
}

//拼接完整的数据库路径
self.fileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:fileName];
}

//创建数据库
-(sqlite3*)openOrCreateDB{

/*//存储路径
NSString* path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"db.sqlite"];*/

//创建数据库指针
sqlite3* sqlite = nil;
//打开数据库
int isOpen = sqlite3_open(self.fileName.UTF8String, &sqlite);

//判断 是否打开成功
if (isOpen == SQLITE_OK) {
NSLog(@"打开成功");
return sqlite;
}else{
NSLog(@"打开失败");
return NULL;
}
}
//执行无返回结果的操作
- (void)execSqlWithSQLString:(NSString*)SQLString message:(NSString*)message{

//打开数据库
sqlite3* sqlite = [self openOrCreateDB];
//执行语句
int isSuccessful = sqlite3_exec(sqlite, SQLString.UTF8String, NULL, NULL, NULL);
//执行信息
if (isSuccessful == SQLITE_OK) {
NSLog(@"执行成功:%@ is successful",message);
}else{
NSLog(@"执行失败:%@ is fail",message);
}
//关闭数据库
sqlite3_close(sqlite);
}

//通用的查询方法
-(NSArray*)querywithSQL:(NSString*)sqlStr{

//打开数据库
sqlite3 *sqlite = [self openOrCreateDB];

//声明stmt指针
sqlite3_stmt *stament;

//初始化可变数据,用来盛放所有记录
NSMutableArray* array = [[NSMutableArray alloc]init];

int result = sqlite3_prepare_v2(sqlite, sqlStr.UTF8String, -1, &stament, NULL);

if (result == SQLITE_OK) {

//遍历没一条执行信息,并存储
while (sqlite3_step(stament) == SQLITE_ROW) {

//动态获得记录的字段数
int count = sqlite3_column_count(stament);
//存放数据信息
NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init];
for (int i = 0 ; i < count ; i ++) {
//确定该字段的类型
int type = sqlite3_column_type(stament, i);
//确定该字段的关键字
const char *name = sqlite3_column_name(stament, i);
NSString *key = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
//根据类型取值
switch (type) {
case SQLITE_TEXT:
{//string
NSString* str = [NSString stringWithCString:(const char*)sqlite3_column_text(stament, i) encoding:NSUTF8StringEncoding];
[mDic setObject:str forKey:key];
}
break;
case SQLITE_INTEGER:
{//int
NSInteger value = sqlite3_column_int(stament, i);
[mDic setObject:@(value) forKey:key];
}
break;
case SQLITE_BLOB:
{

}
break;

default:
break;
}
}
//将记录添加到数组-
[array addObject:mDic];
}
//关闭数据库,释放资源
sqlite3_close(sqlite);
//释放指针
sqlite3_finalize(stament);
//返回该值
return array;
}else{
NSLog(@"查询语句有问题");
//关闭数据库,释放资源
sqlite3_close(sqlite);
//释放指针
sqlite3_finalize(stament);
return  array;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: