標籤:pat close not sse 更新 執行 com ext
SQLite是使用C語言寫的開源庫,實現了一個自包含的SQL關係型資料庫引擎,可以使用SQLite儲存操作大量的資料,作為關係型資料庫我們可以在一個資料庫中建立多張相關聯的表來解決大量資料重複的問題。而且SQLite庫也針對行動裝置上的使用進行了最佳化。
因為
SQLite的介面使用
C寫的,而且
Objective-C是
C的超集所以可以直接在項目中使用
SQLite。
寫了一個小demo,git:https://github.com/yangchengzh/PachagingSqlite
下面是關鍵的部分代碼 static sqlite3 *db;
- (sqlite3 *)openDB
{
// 說明已經開啟資料庫
if (db !=nil) {
return db;
}
NSString*doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) lastObject];
NSString*fileName = [docstringByAppendingPathComponent:@"perple.sqlite"];
//將OC字串轉換為c語言的字串
const char*cfileName = fileName.UTF8String;
//開啟資料庫檔案(如果資料庫檔案不存在,該函數就會自動建立資料庫檔案)
int result =sqlite3_open(cfileName, &db);
if (result== SQLITE_OK) {
NSLog(@"資料庫已開啟");
} else{
NSLog(@"資料庫開啟失敗");
}
returndb;
}
- (void)closeDB
{
int result =sqlite3_close(db);
if (result== SQLITE_OK) {
NSLog(@"資料庫已關閉");
db = nil;
} else{
NSLog(@"資料庫關閉失敗");
}
}
- (void)creatTable
{
db = [selfopenDB];
NSString*sql = @"create table IF NOT EXISTS perpleTable(number integerprimary key not NULL, name text not NULL, gender text not NULL, ageinteger not NULL)";
int result =sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
if (result== SQLITE_OK) {
NSLog(@"建立表成功");
} else{
NSLog(@"建立表失敗");
}
[selfcloseDB];
}
- (void)insertWithModel:(PersonModel *)model
{
db = [selfopenDB];
NSString*sql = [NSString stringWithFormat:@"insert into perpleTable(number,name, gender, age) values(‘%ld‘, ‘%@‘, ‘%@‘, ‘%ld‘)", model.number,model.name, model.gender, model.age];
int result =sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
if (result== SQLITE_OK) {
NSLog(@"添加成功");
} else{
NSLog(@"添加失敗");
}
[selfcloseDB];
}
- (void)delateWithAge:(NSInteger)age
{
db = [selfopenDB];
NSString*sql = [NSString stringWithFormat:@"delete from perpleTable whereage = ‘%ld‘", age];
int result =sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
if (result== SQLITE_OK) {
NSLog(@"刪除成功");
} else{
NSLog(@"刪除表失敗");
}
[selfcloseDB];
}
- (void)delateWithName:(NSString *)name
{
db = [selfopenDB];
NSString*sql = [NSString stringWithFormat:@"delete from perpleTable wherename = ‘%@‘", name];
int result =sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
if (result== SQLITE_OK) {
NSLog(@"刪除成功");
} else{
NSLog(@"刪除表失敗");
}
[selfcloseDB];
}
- (void)updateWithName:(NSString *)name byAge:(NSInteger)age
{
db = [selfopenDB];
NSString*sql = [NSString stringWithFormat:@"update perpleTable set name =‘%@‘ where age = ‘%ld‘", name, age];
int result =sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
if (result== SQLITE_OK) {
NSLog(@"更新資料成功");
} else{
NSLog(@"更新資料失敗");
}
[selfcloseDB];
}
- (void)selertAll
{
//1.開啟資料庫
db = [selfopenDB];
//2.寫sql語句
NSString*sql = @"select * from perpleTable";
//3.建立跟隨指標
sqlite3_stmt*stmt = nil;
//4.執行語句
int result =sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL);
//5.判斷語句是否正確
if (result== SQLITE_OK) {
NSLog(@"查詢成功");
//6.執行查詢
while (sqlite3_step(stmt) == SQLITE_ROW) {
//7.滿足條件 讀取資料
int number = sqlite3_column_int(stmt, 0);
const unsigned char *name = sqlite3_column_text(stmt, 1);
const unsigned char *gender = sqlite3_column_text(stmt, 2);
int age = sqlite3_column_int(stmt, 3);
NSLog(@"name = %s, number = %d, gender = %s, age = %d", name,number, gender, age);
}
} else{
NSLog(@"查詢失敗");
}
//8.釋放指標
sqlite3_finalize(stmt);
//9.關閉資料庫
[selfcloseDB];
}
- (void)selertWithAge:(NSInteger)age
{
db = [selfopenDB];
NSString*sql = [NSString stringWithFormat:@"select * from perpleTable whereage = %ld", age];
sqlite3_stmt*stmt = nil;
int result =sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL);
if (result== SQLITE_OK) {
NSLog(@"查詢成功");
while (sqlite3_step(stmt) == SQLITE_ROW) {
const unsigned char *name = sqlite3_column_text(stmt, 1);
const unsigned char *gender = sqlite3_column_text(stmt, 2);
int number = sqlite3_column_int(stmt, 0);
int age = sqlite3_column_int(stmt, 3);
NSLog(@"name = %s, number = %d, gender = %s, age = %d", name,number, gender, age);
}
} else{
NSLog(@"查詢失敗");
}
sqlite3_finalize(stmt);
[selfcloseDB];
}
sqlite的增刪改查