【FMDB使用】問題:多個用戶登陸同一個設(shè)備糊余,賬單數(shù)據(jù)相同

解決辦法:

因為賬單用FMDB保存到了數(shù)據(jù)庫,所以要在數(shù)據(jù)庫的表中单寂,添加一個字段:區(qū)分不同的用戶——》那就是用戶名了(手機號)

如果一個手機可以在多個設(shè)備登錄啄刹,消息的狀態(tài),應(yīng)該用"手機號+設(shè)備ID"作為唯一標示凄贩。

一.創(chuàng)建表

創(chuàng)建表的sql語句:
"create table if not exists bill(loginName varchar(2048),orderId varchar(2048), tradeTime varchar(2048), amount varchar(256), status varchar(256), bizDesc varchar(2048),partyName varchar(2048),cardNo varchar(256),bizCode varchar(256))"

#pragma mark---來創(chuàng)建表
- (void)createTable{ NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/Container.db"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; if ([database open]) { NSString *createBillTable = @"create table if not exists bill(loginName varchar(2048),orderId varchar(2048), tradeTime varchar(2048), amount varchar(256), status varchar(256), bizDesc varchar(2048),partyName varchar(2048),cardNo varchar(256),bizCode varchar(256))"; if (![database executeUpdate:createBillTable]) { NSLog(@"create error %@", database.lastErrorMessage); } } [database close]; }

二.插入一條數(shù)據(jù)

插入一條數(shù)據(jù)的sql語句:"insert into bill (loginName,orderId,tradeTime,amount,status,bizDesc,partyName,cardNo,bizCode) values(?,?,?,?,?,?,?,?,?)"

SP_LOGIN_TOKEN.loginName登陸的時候,已保存袱讹,直接用
- (BOOL)insertTrip:(NSDictionary *)billDic { NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/Container.db"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; BOOL result = FALSE; NSString *insertSql =@"insert into bill (loginName,orderId,tradeTime,amount,status,bizDesc,partyName,cardNo,bizCode) values(?,?,?,?,?,?,?,?,?)"; if ([database open]) { result = [database executeUpdate:insertSql, SP_LOGIN_TOKEN.loginName, [billDic objectForKey:@"orderId"], [billDic objectForKey:@"tradeTime"], [billDic objectForKey:@"amount"], [billDic objectForKey:@"status"], [billDic objectForKey:@"bizDesc"], [billDic objectForKey:@"partyName"], [billDic objectForKey:@"cardNo"], [billDic objectForKey:@"bizCode"]]; [database close];
if (result == FALSE) { NSLog(@"insertError:%@",database.lastErrorMessage); } } return result; }

三.批量插入數(shù)據(jù)

(循環(huán))插入一條數(shù)據(jù)的sql語句:"insert into bill (loginName,orderId,tradeTime,amount,status,bizDesc,partyName,cardNo,bizCode) values(?,?,?,?,?,?,?,?,?)"

-(BOOL)insertDateTrip:(NSArray *)billArr{ BOOL result = FALSE; NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/Container.db"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; if ([database open]) { NSInteger count = [billArr count]; BOOL isRollBack = NO; @try { //可能出現(xiàn)問題的代碼寫在此處 //手動開啟一個事務(wù)(對sqlite3 開啟一個事務(wù)) [database beginTransaction]; for (int i = 0; i < count; i++) { NSDictionary *dicSubApp = [billArr objectAtIndex:i]; NSString *insertSql =@"insert into bill (loginName,orderId,tradeTime,amount,status,bizDesc,partyName,cardNo,bizCode) values(?,?,?,?,?,?,?,?,?)"; NSLog(@"insertSql====%@",insertSql); result = [database executeUpdate:insertSql, SP_LOGIN_TOKEN.loginName, [dicSubApp objectForKey:@"orderId"], [dicSubApp objectForKey:@"tradeTime"], [dicSubApp objectForKey:@"amount"], [dicSubApp objectForKey:@"status"], [dicSubApp objectForKey:@"bizDesc"], [dicSubApp objectForKey:@"partyName"], [dicSubApp objectForKey:@"cardNo"] [dicSubApp objectForKey:@"bizCode"] ]; if (!result) { NSLog(@"insertError:%@",database.lastErrorMessage); break; } } } @catch (NSException *exception) { //一旦try中的代碼出現(xiàn)了異常疲扎,此處能捕獲到異常 NSLog(@"error:%@",exception.reason); isRollBack = YES; //對數(shù)據(jù)庫執(zhí)行事務(wù)的回滾操作,回到最初的狀態(tài) [database rollback]; } @finally { //不管出不出現(xiàn)異常捷雕,代碼都可以執(zhí)行到此處 if (isRollBack ==NO) { //提交事務(wù) [database commit]; } } [database close]; } return result; }

四.查詢一條數(shù)據(jù)

查詢一條數(shù)據(jù) sql語句:select * from bill where loginName = '%@' and orderId = '%@'

- (NSDictionary*)isTripExist:(id)orderId{ NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/Container.db"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; if([database open]){ NSDictionary *dic; NSString *sql = [NSString stringWithFormat:@"select * from bill where loginName = '%@' and orderId = '%@'",SP_LOGIN_TOKEN.loginName,orderId];// FMResultSet *set = [database executeQuery:sql]; while ([set next]) { dic = @{@"loginName":SP_LOGIN_TOKEN.loginName, @"orderId":[set stringForColumn:@"orderId"], @"tradeTime":[set stringForColumn:@"tradeTime"], @"amount":[set stringForColumn:@"amount"], @"status":[set stringForColumn:@"status"], @"bizDesc":[set stringForColumn:@"bizDesc"], @"partyName":[set stringForColumn:@"partyName"], @"cardNo":[set stringForColumn:@"cardNo"], @"bizCode":[set stringForColumn:@"bizCode"] }; } [database close]; return dic; }else{ NSLog(@"could not dababase!"); return nil; } }

五.批量查詢數(shù)據(jù)

多條件查詢 sql語句:select * from bill where loginName = '%@'

-(NSArray *)querSelectSql{ NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/Container.db"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; if ([database open]){ [database setShouldCacheStatements:YES]; NSMutableArray *FinalArray=[NSMutableArray arrayWithCapacity:0]; FMResultSet *set = nil; NSString *sql = [NSString stringWithFormat:@"select * from bill where loginName = '%@'",SP_LOGIN_TOKEN.loginName]; set=[database executeQuery:sql]; NSLog(@"%@",[database lastErrorMessage]); while ([set next]){ NSDictionary *dic = @{@"orderId":[set stringForColumn:@"orderId"], @"tradeTime":[set stringForColumn:@"tradeTime"], @"amount":[set stringForColumn:@"amount"], @"status":[set stringForColumn:@"status"], @"bizDesc":[set stringForColumn:@"bizDesc"], @"partyName":[set stringForColumn:@"partyName"], @"cardNo":[set stringForColumn:@"cardNo"], @"bizCode":[set stringForColumn:@"bizCode"] }; [FinalArray addObject:dic]; } [database close]; return FinalArray; } else{ NSLog(@"could not open dababase!”); return nil; } }

六.批量更新數(shù)據(jù)

(循環(huán))一條更新 sql語句:update bill where loginName ='%@' set %@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@‘(錯誤)

應(yīng)該是:(loginName必須是唯一標示.用orderId或tradeTime)
update bill set %@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@‘ where loginName ='%@‘

-(BOOL)updateDataWithBill:(NSArray *)billArray{ BOOL result = FALSE; NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/Container.db"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; if ([database open]) { NSInteger count = [billArray count]; for (int i = 0; i < count; i++) { NSDictionary *dicSubApp = [billArray objectAtIndex:i]; NSString *sql = [NSString stringWithFormat:@"update bill where loginName ='%@' set %@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@',%@='%@'", SP_LOGIN_TOKEN.loginName, @"orderId",[dicSubApp objectForKey:@"orderId"], @"tradeTime",[dicSubApp objectForKey:@"tradeTime"], @"amount",[dicSubApp objectForKey:@"amount"], @"status",[dicSubApp objectForKey:@"status"], @"bizDesc",[dicSubApp objectForKey:@"bizDesc"], @"partyName",[dicSubApp objectForKey:@"partyName"], @"cardNo",[dicSubApp objectForKey:@"cardNo"], @"bizCode",[dicSubApp objectForKey:@"bizCode"]]; result = [database executeUpdate:sql]; if (result == FALSE) { NSLog(@"SubApp 數(shù)據(jù)批量更新失敗"); break; } } [database commit]; [database close]; } return result; }

七.分頁查詢數(shù)據(jù)

BILL_LIMIT_COUNT 20
分頁查詢數(shù)據(jù) sql語句 : select * from bill where loginName = '%@' ORDER BY tradeTime DESC limit '%d' offset '%d'
#pragma mark -通過頁碼來查詢賬單數(shù)據(jù)(分頁) -(NSArray*)querSelectSqlBillStartPage:(int)page{ NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/Container.db"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; if ([database open]){ [database setShouldCacheStatements:YES]; NSMutableArray *FinalArray=[NSMutableArray arrayWithCapacity:0]; FMResultSet *set = nil; NSString *sql =[NSString stringWithFormat: @"select * from bill where loginName = '%@' ORDER BY tradeTime DESC limit '%d' offset '%d'",SP_LOGIN_TOKEN.loginName,BILL_LIMIT_COUNT,page * BILL_LIMIT_COUNT]; set=[database executeQuery:sql]; NSLog(@"%@",[database lastErrorMessage]); while ([set next]){ NSDictionary *dic = @{@"orderId":[set stringForColumn:@"orderId"], @"tradeTime":[set stringForColumn:@"tradeTime"], @"amount":[set stringForColumn:@"amount"], @"status":[set stringForColumn:@"status"], @"bizDesc":[set stringForColumn:@"bizDesc"], @"partyName":[set stringForColumn:@"partyName"], @"cardNo":[set stringForColumn:@"cardNo"], @"bizCode":[set stringForColumn:@"bizCode"] }; [FinalArray addObject:dic]; } [database close]; return FinalArray; } else{ NSLog(@"could not open dababase!"); return nil; } }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椒丧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子救巷,更是在濱河造成了極大的恐慌壶熏,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浦译,死亡現(xiàn)場離奇詭異棒假,居然都是意外死亡,警方通過查閱死者的電腦和手機精盅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門帽哑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叹俏,你說我怎么就攤上這事妻枕。” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵屡谐,是天一觀的道長述么。 經(jīng)常有香客問我,道長愕掏,這世上最難降的妖魔是什么段磨? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮蛙婴,結(jié)果婚禮上宣谈,老公的妹妹穿的比我還像新娘。我一直安慰自己肄梨,他們只是感情好阻荒,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著众羡,像睡著了一般侨赡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粱侣,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天羊壹,我揣著相機與錄音,去河邊找鬼齐婴。 笑死油猫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柠偶。 我是一名探鬼主播情妖,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诱担!你這毒婦竟也來了毡证?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蔫仙,失蹤者是張志新(化名)和其女友劉穎料睛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摇邦,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡恤煞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了施籍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱州。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖法梯,靈堂內(nèi)的尸體忽然破棺而出苔货,到底是詐尸還是另有隱情犀概,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布夜惭,位于F島的核電站姻灶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诈茧。R本人自食惡果不足惜产喉,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望敢会。 院中可真熱鬧曾沈,春花似錦、人聲如沸鸥昏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吏垮。三九已至障涯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膳汪,已是汗流浹背唯蝶。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遗嗽,地道東北人粘我。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像痹换,于是被迫代替她去往敵國和親征字。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容