//
// 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