カプセル化されたデータベース操作
5436 ワード
データベースの作成、削除、変更などの操作ができます.
使用前にsqlite 3データベースパッケージをインポートする必要があります
SandBoxPath.h
SandBoxPath.m
DataBaseHelper.h
DataBaseHelper.m
使用前にsqlite 3データベースパッケージをインポートする必要があります
SandBoxPath.h
#import
@interface SandBoxPath : NSObject
//
+ (NSString *)homePath;
// Documents
+ (NSString *)documents;
// libraray
+ (NSString *)library;
//libraryCaches
+ (NSString *)libraryCaches;
//temp
+ (NSString *)temp;
@end
SandBoxPath.m
#import "SandBoxPath.h"
@implementation SandBoxPath
//
+ (NSString *)homePath
{
return NSHomeDirectory();
}
// Documents
+ (NSString *)documents
{
return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
}
// Library
+ (NSString *)library
{
return NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
}
// caches
+ (NSString *)libraryCaches
{
return NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
}
// tem
+ (NSString *)temp
{
return NSTemporaryDirectory();
}
@end
DataBaseHelper.h
#import
#import
@interface DataBaseHelper : NSObject
+ (instancetype)sharedDatabaseHelper;
//
- (void)dbFilePathWithFileName: (NSString *)fileName;
//
- (void)operationSQLWithSqlString: (NSString *)sqlstr;
//
- (NSArray *)queryDataWithSqlstring: (NSString *)sqlString;
@end
DataBaseHelper.m
#import "DataBaseHelper.h"
#import "SandBoxPath.h"
@interface DataBaseHelper ()
@property (nonatomic,retain) NSString *fileName;
@end
@implementation DataBaseHelper
+ (instancetype)sharedDatabaseHelper
{
static DataBaseHelper *dataBaseHelper = nil;
@synchronized(self) {
if (!dataBaseHelper) {
dataBaseHelper = [[DataBaseHelper alloc] init];
}
return dataBaseHelper;
}
}
//
- (void)dbFilePathWithFileName: (NSString *)fileName
{
// documents
NSString *docuPath = [SandBoxPath documents];
// , , ,
if (![fileName containsString:@".sqlite"])
{
fileName = [fileName stringByAppendingString:@".sqlite"];
}
self.fileName = [docuPath
stringByAppendingPathComponent:fileName];
}
//
- (sqlite3 *)openOrCreateDB
{
sqlite3 *sqlDB = NULL;
//
int result = sqlite3_open(self.fileName.UTF8String, &sqlDB);
if (result == SQLITE_OK) {
NSLog(@" ");
return sqlDB;
}
else
{
NSLog(@" ");
return NULL;
}
}
// ,
- (void)operationSQLWithSqlString: (NSString *)sqlstr
{
sqlite3 *sqlDB = [self openOrCreateDB];
int result = sqlite3_exec(sqlDB, sqlstr.UTF8String, NULL, NULL, NULL);
if (result == SQLITE_OK) {
NSLog(@" ");
// ,
sqlite3_close(sqlDB);
NSLog(@"%@",self.fileName);
}
else
{
NSLog(@" ");
// ,
sqlite3_close(sqlDB);
}
}
// ,
- (NSArray *)queryDataWithSqlstring: (NSString *)sqlString
{
// ,
NSMutableArray *resultArray = [[NSMutableArray alloc] init];
//
sqlite3 *sqlDB = [self openOrCreateDB];
// stmt ,
sqlite3_stmt *stament = NULL;
int result = sqlite3_prepare(sqlDB, sqlString.UTF8String, -1, &stament, NULL);
if (result == SQLITE_OK) {
// step ,stament
while (sqlite3_step(stament) == SQLITE_ROW) {
// ,
int columnCount = sqlite3_column_count(stament);
NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
//
for (int i = 0; i < columnCount; i++) {
int type = sqlite3_column_type(stament, i);
//
const char *attName = sqlite3_column_name(stament, i);
NSString *keyString = [NSString stringWithCString:attName encoding:NSUTF8StringEncoding];
switch (type) {
case SQLITE_INTEGER:
{
int value = sqlite3_column_int(stament,i);
[mDict setObject:[NSNumber numberWithInt:value] forKey:keyString];
}
break;
case SQLITE_TEXT:
{
NSString *valueString = [NSString stringWithCString:(const char *)sqlite3_column_text(stament, i) encoding:NSUTF8StringEncoding];
[mDict setObject:valueString forKey:keyString];
}
break;
case SQLITE_FLOAT:
{
float value = sqlite3_column_int(stament,i);
[mDict setObject:[NSNumber numberWithFloat:value] forKey:keyString];
}
break;
default:
break;
}
}
[resultArray addObject:mDict];
}
}
sqlite3_close(sqlDB);
sqlite3_finalize(stament);
return resultArray;
}
@end