當前位置:首頁 » 存儲配置 » iosfmdb存儲圖片

iosfmdb存儲圖片

發布時間: 2022-11-21 05:19:55

⑴ ios fmdb 存jsonmodel 里的數組屬性怎麼存

第一步:要將數組中的對象需要遵循 NSCoding 協議,實現協議中的兩個方法。 第二步:通過 NSKeyedArchive 進行快速歸檔,它會自動寫到文件中,讀取可以使用 NSKeyedUnarchiver 來解壓 代碼例子在網上都能找到。

⑵ ios中fmdb的使用有什麼需要注意的

需要注意以下幾點:
1、值為null的列處理
先是通過resultDictionary方法,將ResultSet轉換成NSDictionary
FMResultSet *rs = [db executeQuery:sql];
while ([rs next]) {
[result addObject:[rs resultDictionary]];
}
然後用objectForKey取出某一列的值,如果該列為空,則返回NSNull,但是判斷非空時發生錯誤:

NSString* originFilePath = [row objectForKey:columnName];// 原始文件路徑
if (originFilePath){
// 非空處理
}
上面的代碼是錯的,即使此列為空,也會走進非空的分支。要用下面的代碼:
NSString* originFilePath = [row objectForKey:columnName];// 原始文件路徑
if ((NSNull *)originFilePath != [NSNull null]){
// 非空處理
}
2、拼接SQL時,表名不能是變數
做一個簡單的全表查詢,返回結果居然是0 row,最後發現表名不能是變數,以下2種寫法都是錯的
FMResultSet *rs = [db executeQuery:@"select * from %@", tableName];
FMResultSet *rs = [db executeQuery:@"select * from ?", tableName];
查詢參數可以是變數,然後綁定參數,但是表名必須是常量,所以要這么寫:
NSString *sql = [NSString stringWithFormat:@"select * from %@", tableName];
FMResultSet *rs = [db executeQuery:sql];
先提前把sql拼好,傳給executeQuery方法的是一個常量傳給executeQuery或者executeUpdate的參數,必須是NSObject執行一句SQL時,FMDB報EXC_BAD_ACCESS,應用崩潰。在stackoverflow上查到,傳給execute方法的參數,必須是NSObject。如果本來是原始數據類型如int,long等,要先用Wrapper類包裝一下。以下的代碼是錯的:
FMResultSet *rs = [db executeQuery:sql, latestBackupTime, now];// latestBackupTime和now是long類型,造成EXC_BAD_ACCESS
應該寫成:
long now = [[NSDate date] timeIntervalSince1970];
// 傳給executeQuery()的參數必須是NSObject,不能是原始數據類型,否則報EXC_BAD_ACCESS
FMResultSet *rs = [db executeQuery:sql, [NSNumber numberWithLong:latestBackupTime], [NSNumber numberWithLong:now]];

⑶ ios開發 fmdb怎麼用pod導入

pod會用么?會用的話,新建一個podfile文件,然後在podfile文件中添加 pod 『FMDB',保存後退出,然後輸入pod install即可。

⑷ ios fmdb為什麼存不上數據

一、簡單說明
1.什麼是FMDB
FMDB是iOS平台的SQLite資料庫框架
FMDB以OC的方式封裝了SQLite的C語言API

2.FMDB的優點
使用起來更加面向對象,省去了很多麻煩、冗餘的C語言代碼
對比蘋果自帶的Core Data框架,更加輕量級和靈活
提供了多線程安全的資料庫操作方法,有效地防止數據混亂

3.FMDB的github地址
https://github.com/ccgus/fmdb

二、核心類
FMDB有三個主要的類
(1)FMDatabase
一個FMDatabase對象就代表一個單獨的SQLite資料庫
用來執行SQL語句

(2)FMResultSet
使用FMDatabase執行查詢後的結果集

(3)FMDatabaseQueue
用於在多線程中執行多個查詢或更新,它是線程安全的

三、打開資料庫
通過指定SQLite資料庫文件路徑來創建FMDatabase對象
FMDatabase *db = [FMDatabase databaseWithPath:path];
if (![db open]) {
NSLog(@"資料庫打開失敗!");
}

文件路徑有三種情況
(1)具體文件路徑
如果不存在會自動創建

(2)空字元串@""
會在臨時目錄創建一個空的資料庫
當FMDatabase連接關閉時,資料庫文件也被刪除

(3)nil
會創建一個內存中臨時資料庫,當FMDatabase連接關閉時,資料庫會被銷毀

四、執行更新
在FMDB中,除查詢以外的所有操作,都稱為「更新」
create、drop、insert、update、delete等

使用executeUpdate:方法執行更新
- (BOOL)executeUpdate:(NSString*)sql, ...
- (BOOL)executeUpdateWithFormat:(NSString*)format, ...
- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments

示例
[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

五、執行查詢
查詢方法
- (FMResultSet *)executeQuery:(NSString*)sql, ...
- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments

示例
// 查詢數據
FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];

// 遍歷結果集
while ([rs next]) {
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
double score = [rs doubleForColumn:@"score"];
}

六、代碼示例
1.新建一個項目,導入libsqlite3庫,並在項目中包含主頭文件

2.下載第三方框架FMDB

3.示例代碼
YYViewController.m文件

1 //
2 // YYViewController.m
3 // 04-FMDB基本使用
4 //
5 // Created by apple on 14-7-27.
6 // Copyright (c) 2014年 wendingding. All rights reserved.
7 //
8
9 #import "YYViewController.h"
10 #import "FMDB.h"
11
12 @interface YYViewController ()
13 @property(nonatomic,strong)FMDatabase *db;
14 @end
15
16 @implementation YYViewController
17
18 - (void)viewDidLoad
19 {
20 [super viewDidLoad];
21 //1.獲得資料庫文件的路徑
22 NSString *doc=[(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
23 NSString *fileName=[doc :@"student.sqlite"];
24
25 //2.獲得資料庫
26 FMDatabase *db=[FMDatabase databaseWithPath:fileName];
27
28 //3.打開資料庫
29 if ([db open]) {
30 //4.創表
31 BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
32 if (result) {
33 NSLog(@"創表成功");
34 }else
35 {
36 NSLog(@"創表失敗");
37 }
38 }
39 self.db=db;
40
41 }
42
43 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
44 {
45 [self delete];
46 [self insert];
47 [self query];
48 }
49
50 //插入數據
51 -(void)insert
52 {
53 for (int i = 0; i<10; i++) {
54 NSString *name = [NSString stringWithFormat:@"jack-%d", arc4random_uniform(100)];
55 // executeUpdate : 不確定的參數用?來佔位
56 [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", name, @(arc4random_uniform(40))];
57 // [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);" withArgumentsInArray:@[name, @(arc4random_uniform(40))]];
58
59 // executeUpdateWithFormat : 不確定的參數用%@、%d等來佔位
60 // [self.db executeUpdateWithFormat:@"INSERT INTO t_student (name, age) VALUES (%@, %d);", name, arc4random_uniform(40)];
61 }
62 }
63
64 //刪除數據
65 -(void)delete
66 {
67 // [self.db executeUpdate:@"DELETE FROM t_student;"];
68 [self.db executeUpdate:@"DROP TABLE IF EXISTS t_student;"];
69 [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
70 }
71
72 //查詢
73 - (void)query
74 {
75 // 1.執行查詢語句
76 FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM t_student"];
77
78 // 2.遍歷結果
79 while ([resultSet next]) {
80 int ID = [resultSet intForColumn:@"id"];
81 NSString *name = [resultSet stringForColumn:@"name"];
82 int age = [resultSet intForColumn:@"age"];
83 NSLog(@"%d %@ %d", ID, name, age);
84 }
85 }
86
87 @end

列印查看結果:

提示:
如果ID設置為逐漸,且設置為自動增長的話,那麼把表中的數據刪除後,重新插入新的數據,ID的編號不是從0開始,而是接著之前的ID進行編號。
注意:
不要寫成下面的形式,不要加'',直接使用%@,它會自動認為這是一個字元串。

⑸ ios開發fmdb存放nsdata怎麼寫

NSData-> NSStringNSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding];NSString->NSDataNSString *aString = @"1234abcd";NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];2.NSData 與 ByteNSData-> Byte數組NSString *testString = @"1234567890";NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];Byte *testByte = (Byte *)[testData bytes];for(int i=0;i<[testData length];i++)printf("testByte = %d\n",testByte[i]);Byte數組-> NSDataByte byte[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};NSData *adata = [[NSData alloc] initWithBytes:byte length:24];Byte數組->16進制數Byte *bytes = (Byte *)[aData bytes];NSString *hexStr=@"";for(int i=0;i<[encryData length];i++){NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff]; ///16進制數if([newHexStr length]==1)hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];elsehexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];}NSLog(@"bytes 的16進制數為:%@",hexStr);16進制數->Byte數組///// 將16進制數據轉化成Byte 數組NSString *hexString = @"3e435fab9c34891f"; //16進制字元串int j=0;Byte bytes[128]; ///3ds key的Byte 數組, 128位for(int i=0;i<[hexString length];i++){int int_ch; /// 兩位16進制數轉化後的10進制數unichar hex_char1 = [hexString characterAtIndex:i]; ////兩位16進制數中的第一位(高位*16)int int_ch1;if(hex_char1 >= '0' && hex_char1 <='9')int_ch1 = (hex_char1-48)*16; //// 0 的Ascll - 48else if(hex_char1 >= 'A' && hex_char1 <='F')int_ch1 = (hex_char1-55)*16; //// A 的Ascll - 65elseint_ch1 = (hex_char1-87)*16; //// a 的Ascll - 97i++;unichar hex_char2 = [hexString characterAtIndex:i]; ///兩位16進制數中的第二位(低位)int int_ch2;if(hex_char2 >= '0' && hex_char2 <='9')int_ch2 = (hex_char2-48); //// 0 的Ascll - 48else if(hex_char1 >= 'A' && hex_char1 <='F')int_ch2 = hex_char2-55; //// A 的Ascll - 65elseint_ch2 = hex_char2-87; //// a 的Ascll - 97int_ch = int_ch1+int_ch2;NSLog(@"int_ch=%d",int_ch);bytes[j] = int_ch; ///將轉化後的數放入Byte數組里j++;}NSData *newData = [[NSData alloc] initWithBytes:bytes length:128];NSLog(@"newData=%@",newData);3. NSData 與 UIImageNSData->UIImageUIImage *aimage = [UIImage imageWithData: imageData];//例:從本地文件沙盒中取圖片並轉換為NSDataNSString *path = [[NSBundle mainBundle] bundlePath];NSString *name = [NSString stringWithFormat:@"ceshi.png"];NSString *finalPath = [path :name];NSData *imageData = [NSData dataWithContentsOfFile: finalPath];UIImage *aimage = [UIImage imageWithData: imageData];UIImage-> NSDataNSData *imageData = UIImagePNGRepresentation(aimae);

⑹ iOS開發資料庫存儲能用FMDB直接存儲對象嗎

如果要存儲復雜對象類型的數據, 該對象必須遵循NSCoding協議, 並實現對應代理方法
對象類型實現代理後, 在存儲之前還有一部操作, 是把對象進行歸檔, 歸檔完成才可以使用FMDB進行存儲, 對應類型為BLOB類型,.
如果要直接存儲復雜對象, 不想寫歸檔什麼的玩意, 可以使用一個第三方框架 JRDB , 這個可以直接存儲復雜對象, jrdb是基於FMDB進行的二次封裝框架, 可以試試噢

⑺ ios fmdb可以直接存的數據類型有哪些

FMResultSet *result = [self.db executeQueryWithFormat:{select * from +表名} 這個返回一個集合, result.next判斷有沒有下一個,你加到數組中,求數組的個數

熱點內容
壓縮版面格式 發布:2025-07-23 18:14:41 瀏覽:185
轟炸博客源碼 發布:2025-07-23 18:10:41 瀏覽:633
java解答 發布:2025-07-23 18:10:01 瀏覽:578
android圖片裁剪上傳圖片 發布:2025-07-23 18:09:11 瀏覽:241
r解壓文件 發布:2025-07-23 18:01:01 瀏覽:504
安溪哪裡有賣禮金密碼箱 發布:2025-07-23 17:32:36 瀏覽:529
同等配置藍鳥同軒逸哪個好 發布:2025-07-23 17:31:27 瀏覽:546
雲伺服器圖片載入速度慢 發布:2025-07-23 17:08:16 瀏覽:171
網址導航源碼帶後台 發布:2025-07-23 17:01:40 瀏覽:599
石粉過磅演算法 發布:2025-07-23 16:53:05 瀏覽:78