iOS sql的簡單封裝

//

//  GroupDBManager.h

#import <Foundation/Foundation.h>

#import "GroupDBmodel.h"

@interface GroupDBManager : NSObject

//此方法返回DBManager的單例

+(GroupDBManager *)shareManager;

// 添加一條數據

- (void)insertDataWithModel:(GroupDBmodel *)model;

- (void)deleteMessageWithChatId:(NSString*)chatId;

// 修改數據庫中的某一條數據

//- (void)updateWithModel:(GroupDBmodel *)model uuid:(int)uuid;

/** 更新數據的創建時間

 @pragma createTime     創建信息的時間

 @pragma status         發送狀態(0 未發送 1 已發送)

 @pragma uuid           數據庫表中信息的uuid

 */

//- (BOOL)updateModelWithCreateTime:(NSString *)createTime andStatus:(NSString *)status andUuid:(int)uuid;

// 獲取全部數據

- (NSArray *)fetchAllgroupBulletin;

// 獲取對應 questionID 下的所有數據

- (NSArray *)fetchAllHistoryWithQuestionID:(NSString *)questionID;

// 獲取對應 questionID 下的最大時間

- (NSString *)findmaxtime:(NSString *)questionID;

// 獲取一個新的uuid(uuid裏的最大值)

- (int)findMaxUuid;

// 判斷是否存在該條記錄

- (BOOL)isExistModel:(NSString*)chatId;

// 刪除整個表

- (void)deleteDBFile;

//

//  GroupDBManager.m


#import "GroupDBManager.h"

#import "FMDatabase.h"//第三方開源庫,裏面封裝了對蘋果原生sqlite3輕量級數據庫的操作

@implementation GroupDBManager

{

FMDatabase *_dataBase;

}

//被 static 關鍵字修飾的變量,只執行一次初始化操作,並且變量會一直持有第一次初始化得到的對象

staticGroupDBManager *manager = nil;

+(GroupDBManager *)shareManager{

if (manager == nil) {

manager = [[GroupDBManageralloc] init];

    }

returnmanager;

}

//重寫init方法

- (id)init{

self = [superinit];

if (self) {

//爲數據庫文件指定創建的路徑

NSString *dbPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/groupBulletin.db"];

//初始化FMDataBase對象,並傳遞數據庫的路徑

_dataBase = [[FMDatabasealloc] initWithPath:dbPath];

//open 兩層含義:如果指定路徑沒有user.db的數據庫文件,會創建此文件並打開;如果指定路徑有數據庫文件則直接打開

//如果創建並打開成功 return yes

        [selfcreateDBFile];

    }

returnself;

}

// 創建數據庫文件

- (void)createDBFile{

if ([_dataBaseopen]) {

//創建一個表, blob 代表二進制的對象

NSString *createSql = @"CREATE TABLE IF NOT EXISTS groupBulletin (id integer primary key autoincrement , chatter varchar(256) , chatId varchar(256) , groupText varchar(256) , headPhoto varchar(256) , senderName varchar(256) , senderTime varchar(256))";

//executeUpdate 執行sql語句的方法,創建表、增、刪、改的sql語句全用此方法執行

//執行sql語句成功返回YES

BOOL isSuccessed =[_dataBaseexecuteUpdate:createSql];

if (!isSuccessed) {

//創建表失敗,lastErrorMessage 獲取到出錯的信息

NSLog(@"error:%@",_dataBase.lastErrorMessage);

        }

    }

}

//添加一條數據

- (void)insertDataWithModel:(GroupDBmodel *)model{

//        UIImage *headImage = model.img;

//    //轉化成NSData (將png格式的圖片轉化成NSData,幾乎是無損耗轉化)

//        NSData *data = UIImagePNGRepresentation(headImage);

//    //sql語句中,用?作爲佔位符,不管是什麼樣類型的數據

//    [self createDBFile];

if ([selfisExistModel:model.chatId]) {

NSLog(@"存在該條");

return;

    }

else {

NSString * insertSQL = @"INSERT INTO groupBulletin(chatter,chatId,groupText,headPhoto,senderName , senderTime) VALUES(?,?,?,?,?,?)";

BOOL isSuccessed = [_dataBaseexecuteUpdate:insertSQL,model.chatter,model.chatId,model.groupText,model.headPhoto,model.senderName,model.senderTime];

if (!isSuccessed) {

NSLog(@"insertError:%@",_dataBase.lastErrorMessage);

        }

    }

}

//刪除某條數據

- (void)deleteMessageWithChatId:(NSString*)chatId

{

NSString *deleteSQL=@"delete from groupBulletin where chatId = ?";

BOOL isSuccessed = [_dataBaseexecuteUpdate:deleteSQL,chatId];

if (!isSuccessed) {

NSLog(@"insertError:%@",_dataBase.lastErrorMessage);

    }

}

- (BOOL)isExistModel:(NSString*)chatId{

FMResultSet * set = [_dataBaseexecuteQuery:@"SELECT * FROM groupBulletin WHERE chatId = ?",[NSNumbernumberWithInt:[chatId intValue]]];

if ([set next]) {

returnYES;

    }

else {

returnNO;

    }

}

//修改數據庫中的某一條數據

//- (void)updateWithModel:(GroupDBmodel *)model id:(int)id{

//

//    NSString *updateSql = @"update groupBulletin set chatId = ?  where id =?";

//    BOOL isSuccessed = [_dataBase executeUpdate:updateSql,model.chatId,[NSNumber numberWithInt:id]];

//    if (!isSuccessed) {

//        NSLog(@"update error:%@",_dataBase.lastErrorMessage);

//    }

//}

/** 更新數據的創建時間

 */

- (BOOL)updateModelWithCreateTime:(NSString *)createTime andStatus:(NSString *)status andUuid:(int)uuid{

NSString * updateSQL = @"UPDATE groupBulletin SET createTime = ?,status = ? WHERE uuid = ?";

BOOL isSucc = [_dataBaseexecuteUpdate:updateSQL,createTime,status,[NSNumbernumberWithInt:uuid]];

if (!isSucc) {

NSLog(@"update error:%@",_dataBase.lastErrorMessage);

returnNO;

    }

returnYES;

}

//獲取全部數據

- (NSArray *)fetchAllgroupBulletin{

NSString *selectSql = @"select * from groupBulletin";

//executeQuery 用於執行查詢的sql語句

//FMResultSet 用於存放查詢結果的類

FMResultSet *set =[_dataBaseexecuteQuery:selectSql];

//next方法,從第一條數據開始取,一直取到最後一條,取到當前數據返回YES,取不到則返回NO

NSMutableArray *array = [NSMutableArrayarray];

while ([set next]) {

GroupDBmodel *model = [[GroupDBmodelalloc] init];

//stringForColumn 根據字段的名稱,取到字段的值

        model.chatId = [set  stringForColumn:@"chatId"];

          }

return array;

}

// 獲取對應 questionID 下的所有數據

- (NSArray *)fetchAllHistoryWithQuestionID:(NSString *)questionID{

NSString *selectSql = @"select * from groupBulletin WHERE chatter = ?";

//    //executeQuery 用於執行查詢的sql語句

//    //FMResultSet 用於存放查詢結果的類

FMResultSet *set =[_dataBaseexecuteQuery:selectSql,questionID];

//    //next方法,從第一條數據開始取,一直取到最後一條,取到當前數據返回YES,取不到則返回NO

NSMutableArray *array = [NSMutableArrayarray];

while ([set next]) {

GroupDBmodel *model = [[GroupDBmodelalloc] init];

//stringForColumn 根據字段的名稱,取到字段的值

        model.chatId = [set stringForColumn:@"chatId"];

        model.chatter = [set stringForColumn:@"chatter"];

        model.groupText = [set stringForColumn:@"groupText"];

        model.headPhoto = [set stringForColumn:@"headPhoto"];

        model.senderName = [set stringForColumn:@"senderName"];

        model.senderTime = [set stringForColumn:@"senderTime"];

NSLog(@"%@----%@----%@----%@----%@----%@",model.chatId,model.chatter,model.groupText,model.headPhoto,model.senderName,model.senderTime);

        [array addObject:model];

    }

return array;

}

-(NSString *)findmaxtime:(NSString * )questionID{

//    NSString *selectSql = @"SELECT MAX(createTime) FROM gro upBulletin where questionUuid = ?";

NSString * selectSQL = @"SELECT * FROM groupBulletin WHERE questionUuid = ?";

FMResultSet *set =[_dataBaseexecuteQuery:selectSQL,questionID];

NSMutableArray * mArray = [[NSMutableArrayalloc] init];

while ([set next]) {

NSString * lastTime = [set stringForColumnIndex:6];

if (lastTime) {

            [mArray addObject:lastTime];

        }

    }

if (mArray.count > 0) {

NSString * str = mArray[0];

for (int i = 1 ; i < mArray.count; i++) {

if ([mArray[i] compare:str options:0] > 0) {

                str = mArray[i];

            }

        }

return str;

    }

else {

return@"0";

    }

}

//-(NSString *)findmaxtime:(NSString * )questionID{

//

//    NSString * selectSQL = @"SELECT * FROM groupBulletin WHERE questionUuid = ?";

//

//    FMResultSet *set =[_dataBase executeQuery:selectSQL,questionID];

//    NSMutableArray * mArray = [[NSMutableArray alloc] init];

//    while ([set next]) {

//        NSString * lastTime = [set stringForColumnIndex:6];

//        return lastTime;

//    }

//    return nil;

//}

- (int)findMaxUuid{

NSString * selectSQL = @"SELECT MAX(uuid) FROM groupBulletin";

int maxUuid = 0;

FMResultSet * set = [_dataBaseexecuteQuery:selectSQL];

while ([set next]) {

//        maxUuid = [set intForColumn:@"uuid"];

        maxUuid = [set intForColumnIndex:0];

    }

return maxUuid;

}

// 刪除整個表

- (void)deleteDBFile{

NSString *dbPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/groupBulletin.db"];

NSFileManager * fm = [NSFileManagerdefaultManager];

if ([fm fileExistsAtPath:dbPath]) {

if ([_dataBaseopen]) {

NSString * selectSQL = @"DELETE FROM groupBulletin";

            [_dataBaseexecuteUpdate:selectSQL];

            [_dataBaseclose];

        }

        [fm removeItemAtPath:dbPath error:nil];

    }

}

@end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章