使用步驟:
1. 引入libsqlite3.0框架
2. 在資料庫操作類裡 引入
// 單例的初始化方法
+ (sqlitemanager *)sharemanager;
// 插入資料
- (void)inserttablewithstudent:(student *)stu;
// 刪除資料
- (void)deletewithage:(nsinteger)age;
// 更新
- (void)updateage:(nsinteger)age byname:(nsstring *)name;
// 查詢
- (student *)selectstudentwithname:(nsstring *)name age:(nsinteger)age;
// 單例類初始化方法
+ (sqlitemanager *)sharemanager
// 為保證程式執行期間一直存在 所以不手動釋放
// 程式執行結束 自動釋放
return manager;
}
// 需要在靜態去定義乙個指標 (讓這個指標指向的物件 從程式開始到結束 一直存在)
// 程式結束後被系統自動釋放
static sqlite3 *db = nil;
// 開啟資料庫
- (sqlite3 *)opendatabase
// 不存在 則建立乙個並開啟
// 獲取documents的路徑
nsstring *documentspath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];
// 拼接資料庫檔案路徑 (拼接的資料的檔案的名字)
nslog(@"%@",dbpath);
// 建立或者開啟資料庫
// 引數1 檔案路徑(需要把oc的字串轉化成c語言的) dbpath.utf8string
// 引數2 資料庫的位址
// 接收一下返回值 判斷是否開啟成功
int result = sqlite3_open(dbpath.utf8string, &db);
// 用sqlite_ok可以查表得到錯誤
if (result == sqlite_ok) else
return db;
}
// 關閉資料庫
- (void)closedatabaseelse
}
// 建立表(要有主鍵值)
- (void)createtableelse
// 關閉資料庫
[self closedatabase];
}
// 插入資料
- (void)inserttablewithstudent:(student *)stuelse
// 不管插入是否成功 都要釋放跟隨指標
sqlite3_finalize(stmt);
// 關閉資料庫
[self closedatabase];
}*****不繫結進行插入操作******
/** * 如果有data資料進行插入操作 sqlite3_exec函式 會把data資料轉化成字串存入資料庫
* 也就是說你插入的資料沒有data資料 直接使用sqlite3_exec這個函式進行操作 無需使用下面的函式進行繫結
* nsstring *sql = @"insert into student(number, name, gender, age) values('%ld', '%@', '%@', '%ld')";
*///- (void)text:(student *)stu
// 刪除資料(根據乙個條件刪除)
- (void)deletewithage:(nsinteger)ageelse
//
// // 關閉資料庫
// [self closedatabase];
#pragma mark --- 通過繫結刪除法
// 開啟資料庫
db = [self opendatabase];
// 寫sql語句
nsstring *sql = @"delete from student where age > ?";
// 建立跟隨指標
sqlite3_stmt *stmt = nil;
// 預執行sql語句
int result = sqlite3_prepare_v2(db, sql.utf8string, - 1, &stmt, null);
if (result == sqlite_ok) else
// 執行繫結的語句
sqlite3_step(stmt);
// 不管成功與否 都要釋放跟隨指標
sqlite3_finalize(stmt);
// 關閉資料庫
[self closedatabase];
}
// 更新資料(根據乙個條件來更新)
- (void)updateage:(nsinteger)age byname:(nsstring *)nameelse
// 關閉資料庫
[self closedatabase];
}
// 根據條件查詢資料
- (student *)selectstudentwithname:(nsstring *)name age:(nsinteger)age
nslog(@"查詢成功");
}else
// 執行sql語句
sqlite3_step(stmt);
// 釋放跟隨指標
sqlite3_finalize(stmt);
// 關閉資料庫
[self closedatabase];
// 自動釋放 物件
return [stu autorelease];
}
// 查詢所有行(返回乙個陣列)
- (nsarray *)selectallrows
nslog(@"成功");
}else
// 釋放跟隨指標
sqlite3_finalize(stmt);
// 關閉資料庫
[self closedatabase];
return array;
}
初嚐資料庫優化
在前兩天的 期學術交流會上,曹建新學長提到了 對資料的查詢盡量少用 需要用哪個欄位就用相應字段。對此自己產生了點小興趣,便折騰了一下。1.建乙個資料庫testdb create database testdb 2.建一張測試表t test use testdb create table t test...
初 資料庫設計優化
正規化,是關係型資料庫關係模式規範化的標準。第一正規化 1nf 強調的是列的原子性,即列不能夠再分成其他幾列。第二正規化 2nf 首先是 1nf,另外包含兩部分內容,一是表必須有乙個主鍵 二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。第三正規化 3nf 首先是 2nf,另外...
初解資料庫 事務
作為程式猿我們都應該清楚,不管是在求職面試的過程中還是在平常的開發中,資料庫起了很重要的作用,資料庫又分為關係型資料庫和非關係型資料庫。接下來將會介紹一些資料庫方面的基礎知識。提起資料庫我們想到的就是我們常常編寫的一些sql語句,那這些sql語句在執行的過程中,怎麼執行的,什麼時候結束,這時候邊涉及...