IOS FMDB 獲取資料庫表和表中的資料

2021-08-03 12:41:51 字數 4746 閱讀 3381

ios開發中,經常會用到資料庫sqlite的知識,除了增,刪,改,查之外,我們說說如何獲取資料庫中有多少表和表相關的內容。

跟資料庫使用相關的一般的增刪改查的語句,這裡就不做解釋了。在網上有很多。記得之前專案中曾經有這樣的乙個場景。乙個資料庫中存在了好幾個表。假定我們不知道表名的前提下來獲取這些資料。

下來看看資料庫結構:

我們可以看到,在這個資料庫檔案中一共有10個表。我們的目的就是獲取這些表中的內容。

在這裡我們使用的是fmdb來操作的。我們下開啟乙個資料庫。

nsstring *smspaht = [[nsbundle mainbundle] pathforresource:@"sms" oftype:@"sqlite"];

fmdatabase *db = [fmdatabase databasewithpath:smspaht];

if ([db open])

我們已經開啟了資料庫,眾所周知fmdb使用executequery來呼叫資料庫語句。在這裡就不賣關子了。查詢乙個資料庫中的所有的表的語句為:

resultset = [db executequery:@"select * from sqlite_master where

type='table';"];

fmresultset這個物件中有乙個屬性columnnametoindexmap。它是乙個nsmutabledictionary物件。其中key表示的是指定結果集中對應列的名稱,value表示的是指定結果集中對應的列號(columnidx)。我們列印出來可以看到:

後邊我們獲取表名的時候,就用到了name = 1 這個字段。我們看下邊的**:

nsstring smspaht = [[nsbundle mainbundle] pathforresource:@」sms」 oftype:@」sqlite」];

fmdatabase db = [fmdatabase databasewithpath:smspaht];

if ([db open]) 

}

列印結果為:

2016-08-26 15:20:05.909 ***x[5255:190053] table,sqlite_sequence,sqlite_sequence,3,create

table sqlite_sequence(name,seq)

2016

-08-26

15:20:05.910 ***x[5255:190053] table,member,member,4,create

table

'member'(

[id] integer primary key autoincrement,

[recordid] integer,

[groupid] integer

)2016

-08-26

15:20:05.910 ***x[5255:190053] table,groups,groups,2,create

table

groups (

[id] integer primary key autoincrement,

[name] varchar (100)

)2016

-08-26

15:20:05.911 ***x[5255:190053] table,blessing,blessing,5,create

table blessing(title text primary key, content

text)

2016

-08-26

15:20:05.911 ***x[5255:190053] table,festivel,festivel,83,create

table festivel(title text primary key, content

text)

2016

-08-26

15:20:05.911 ***x[5255:190053] table,funny,funny,357,create

table funny(title text primary key, content

text)

2016

-08-26

15:20:05.913 ***x[5255:190053] table,love,love,419,create

table love(title text primary key, content

text)

2016

-08-26

15:20:05.944 ***x[5255:190053] table,other,other,449,create

table other(title text primary key, content

text)

2016

-08-26

15:20:05.944 ***x[5255:190053] table,xiaoyuan,xiaoyuan,607,create

table xiaoyuan(title text primary key, content

text)

2016

-08-26

15:20:05.944 ***x[5255:190053] table,yuehui,yuehui,642,create

table yuehui(title text primary key, content

text)

2016

-08-26

15:20:05.944 ***x[5255:190053] table,zhichang,zhichang,670,create

table zhichang(title text primary key, content

text)

通過對比columnnametoindexmap中的內容,大家應該看明白了吧。我們就是通過nsstring *str1 = [resultset stringforcolumnindex:1];來獲取表名的。

nsstring *smspaht = [[nsbundle mainbundle] pathforresource:@"sms" oftype:@"sqlite"];

fmdatabase *db = [fmdatabase databasewithpath:smspaht];

if ([db open])

nsmutabledictionary *result = [nsmutabledictionary dictionary];

for (nsstring *tablename in tablenames) }}

result[tablename] = dict;

}nsdata *jsondata = [nsjsonserialization datawithjsonobject:result options:0 error:null];

if (!jsondata)

nsstring *jsonstr = [[nsstring alloc] initwithdata:jsondata encoding:nsutf8stringencoding];

qkylog(@"%@",jsonstr);

}

上邊的**僅作參考,在實際開發中會根據不同的資料結構有不用的寫法。但是我們的目的主要是懂得如何去獲取資料。

最終解析出的json資料為:

,

"groups": {},

"xiaoyuan": {

"校園": [

"上課瞌睡過度,眼皮打架無數,實在支援不住,誤入夢境深處,呼嚕,呼嚕,驚起同學全部",

"校園風光如此多驕,引無數情侶盡彎腰,惜龍女楊過,牛郎織女略輸一等,一代大傻韋小寶盡拿靈通發簡訊!",

"大學中永恆的愛情如鑽石一般的少,大多是:只因思顏意,未求終生緣!",

"有風的日子,不妨出去走走。不妨放鬆呼吸,走向絢麗陽光,把發黃的",

"心事交給流水,向遠去的霧靄行個注目禮。",

"逝去的年華在風中搖曳,楓樹下依舊殘留著她暖暖的氣息,緊緊的抱著她,卻發現眼前只有紛紛落下的楓葉.",

"我們的校園生活像一支旋律,它是熱情,快樂和友愛的組裝,是激越,奔放,令人陶醉的交響樂.",

"校園是我的一架鋼琴,作息是鋼琴的一副踏板,放飛的心是起伏的琴鍵,苦辣酸甜是多彩的樂章",

"我願青春如校園春雨中的牡丹,夏夜幽靜處的白蘭,秋風微露裡的海棠,漫天飛雪中的寒梅.",

"虎子最近上火連續兩天上課鼻出血,昨天當鈴響起虎子鼻血再次噴出同桌小青很是關心:你的週期咋那麼準?",

"路是自己走出來的:愛情是自己努力得來的:前途是自己拼出來的,你要努力啊",

"忘了,忘了吧,忘掉所有的不愉快,我們都非聖賢,在我心底,依然珍惜...",...

**:

iOS FMDB 資料庫 詳解

一 簡單說明 1.什麼是fmdb fmdb是ios平台的sqlite資料庫框架 fmdb以oc的方式封裝了sqlite的c語言api 2.fmdb的優點 使用起來更加物件導向,省去了很多麻煩 冗餘的c語言 對比蘋果自帶的core data框架,更加輕量級和靈活 提供了多執行緒安全的資料庫操作方法,有...

iOS FMDB 資料庫相關

在iphone上是採用sqlite進行資料儲存是我一種比較習慣性的做法。一般在其他平台也比較習慣用sqlite,比如android。而iphone上有一些封裝好的第三方框架提供使用,更節省了許多時間。如 sqlitepersistentobjects fmdb。今天查詢了這個兩個框架,感覺fmdb的...

iOS FMDB資料庫加密相關

資料庫加密一般有兩種方式 1 對所有資料進行加密 2 對資料庫檔案加密 處於客戶端效能的考慮,通常我們對資料庫檔案進行加密,在ios上用的比較多的是 sqlcipher,由於原生提供的sqlite api是c語言實現的,通常我們會用乙個在github上比較有名的乙個工具庫fmdb,fmdb對原生的s...