當我們使用sqlite時,都需要先建立資料庫建立資料表,再執行相應地sql語句,這樣不利於對資料庫操作進行統一管理,也不符合物件導向的思想,當我們的需求發生改變時,例如資料庫表名改了,或者是要新增幾個字段,這時候就會出現一種四處找資料庫操作**的情況,如果是一處兩處還好,但如果是上百處,那就會是乙個很大的工作量。所以我們可以來定義乙個工具類sqlmanager,統一對資料庫操作進行管理。
工具類sqlmanager一般都會被定義為單例模式,正常情況下,系統中sqlmanager物件只需儲存乙份,.h檔案上對外提供乙個獲取單例的介面
/** 獲取單例物件 */
+ (instancetype)sharemanage;
.m檔案中實現該單例方法
static sqlmanager *_instance;
+ (instancetype)sharemanage
); return _instance;
}
既然是資料庫管理工具類,要對資料庫進行操作,同樣地我們需要建立資料庫還有資料庫表,建立只需要乙個次,所以可以將建立**寫在initialize方法裡面,
+ (void)initialize
}
現在我們讓工具類向外提供乙個方法,用來向資料庫插入一條學生資料
/** 插入學生資料 */
- (bool)insertstudent:(hmstudent *)student;
當然我們首先需要定義乙個學生模型來儲存資料,學生類中得字段根資料庫表中得字段一一對應
@property (nonatomic, copy) nsstring *name;
@property (nonatomic, assign) int age;
@property (nonatomic, assign) double score;
@property (nonatomic, assign) int id;
insertstudent:方法的實現如下
- (bool)insertstudent:(hmstudent *)student
return no;
}
如此該方法就封裝了乙個插入操作。
再來到我們需要使用資料庫操作的類裡面,只需要匯入工具類的標頭檔案,就可以以物件導向的方式向資料庫中插入一條資料
student *stu = [[student alloc] init];
stu.name = @"lnj";
stu.age = 30;
stu.score = 100.0;
if ([[sqlmanager sharemanage]insertstudent:stu])
以此類推,我們可以封裝其他的刪除修改操作,以後如果出現什麼資料庫需求修改時,我們就只用專心的修改工具類就行了,就不用四處的去找資料庫相關操作的**了,而且相比較於之間運算元據庫的方式,以上**更具備閱讀性。
查詢的方式比較特殊,現在就來簡單的實現以下。
同樣需要對外提供乙個藉口
- (nsarray *)query;
該方法用來查詢所有的資料,並返回乙個學生模型的陣列
nsstring *sql = @"select * from t_student;";
sqlite3_stmt *stemt = null;
sqlite3_prepare_v2(_db, sql.utf8string, -1, &stemt, null);
// 判斷有沒有查詢結果
nsmutablearray *arrm = [nsmutablearray array];
while (sqlite3_step(stemt) == sqlite_row)
return arrm;
當我們需要在控制器中獲取資料庫中得資料時,只要如下幾行**
nsarray *arr = [[sqlmanager sharemanage] query];
for (student *stu in arr)
so easy!你會發現控制器需要關注的**越來越少,**會越來越簡潔,這就是封裝的魅力!
SQLite的簡單封裝
studenttool.h sqlite的封裝 學生資料的crud import class student inte ce studenttool nsobject bool addstudent student student 獲得所有學生 return 陣列中裝著都說student模型 nsa...
C 封裝SQLite例項《二》
這一篇部落格主要講如何使用sqlite有關庫函式去管理資料庫中的一張表。主要用到的函式 sqlite api int sqlite3 get table sqlite3 db,the database on which the sql executes const char zsql,the sql...
C 封裝SQLite例項《六》
之前的連續五篇大致介紹了各種sqlite的原生函式原型,引數以及用途等,並對各個封裝的類做了詳細的介紹,最後一篇將展示一下怎麼使用封裝,使用封裝的時候需要注意的問題等。假設已經存在乙個資料庫名為firsqlite.db 下面使用各種類來對其做各種常規訪問與操作。最開始要定義乙個cppsqlite3d...