iOS Sqlite筆記
一、建立資料庫及表
//開啟資料庫 如果沒有就建立
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"data.sqlite"];// 資料庫名字也可以不帶字尾
NSLog(@"%@",path);
int success = sqlite3_open(path.UTF8String, &_db);
if (success == SQLITE_OK) {
NSLog(@"建立資料庫成功!");
//2.建立表 (指定欄位 -> 需求: 儲存 學生資訊 id name score)
//用sql語句 來建立
//編寫sql語句
NSString *str = @"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, score REAL NOT NULL)";
//執行sql語句
int success_t = sqlite3_exec(_db, str.UTF8String, NULL, NULL, NULL);
if (success_t == SQLITE_OK) {
NSLog(@"建立表成功!");
}else{
NSLog(@"建立表失敗!");
}
}else{
NSLog(@"建立資料庫失敗!");
}
二、向資料庫新增資料
//3.增加 資料 (100條 資料隨機)
for (int i = 0; i <100; i++) {
NSString *strName = [NSString stringWithFormat:@"changyou-%d",i];
NSString *sqlStr = [NSString stringWithFormat:@"INSERT INTO t_student (name ,score)VALUES('%@',%.02f)",strName,arc4random_uniform(1000)/10.0];
//執行
int success = sqlite3_exec(_db, sqlStr.UTF8String, NULL, NULL, NULL);
if (success == SQLITE_OK) {
NSLog(@"新增成功!");
}else{
NSLog(@"新增失敗!");
}
}
三、刪除資料
//4.刪除 資料 (70 - 80 分數)
NSString *sqlStr = @"DELETE FROM t_student WHERE score > 80.0";
//執行
int success = sqlite3_exec(_db, sqlStr.UTF8String, NULL, NULL, NULL);
if (success == SQLITE_OK) {
NSLog(@"刪除成功!");
}else{
NSLog(@"刪除失敗!");
}
四、修改資料
//5.修改 資料 (修改分數小於60.0為60.0)
NSString *sqlStr = @"UPDATE t_student SET score = 60.0 WHERE score < 60.0";
//執行
int success = sqlite3_exec(_db, sqlStr.UTF8String, NULL, NULL, NULL);
if (success == SQLITE_OK) {
NSLog(@"修改成功!");
}else{
NSLog(@"修改失敗!");
}
五、查詢資料
//6.查詢資料 ( score >= 60)
//NSString *sqlStr = @"SELECT * FROM t_student WHERE score > 60.0 ORDER BY score DESC;";
//查詢資料 ( name 中帶 you 數字)
NSString *sqlStr = @"SELECT * FROM t_student WHERE name LIKE '%you%'";
//查詢之後 把結果放在 stmt物件
// 儲存所有的結果集
sqlite3_stmt *stmt = nil;
sqlite3_prepare_v2(_db, sqlStr.UTF8String, -1, &stmt, NULL);
//獲取到所有結果 每一步 查詢到一條記錄
while (sqlite3_step(stmt) == SQLITE_ROW) {
//取出一條記錄
// name TEXT column
const unsigned char * name = sqlite3_column_text(stmt, 1);
NSString *strName = [NSString stringWithCString:(const char *)name encoding:NSUTF8StringEncoding];
//score REAL
double score = sqlite3_column_double(stmt, 2);
NSLog(@"name = %@ score = %f",strName,score);
}
六、關閉資料庫
// 關閉資料庫
// 資料庫在合適位置關閉,根據需要,靈活掌握
//sqlite3_close(_db);
七、第三方類庫FMDB
FMDatabase這個類是執行緒不安全的,如果在多個執行緒中同時使用一個FMDatabase例項,會造成資料混亂等問題
為了保證執行緒安全,FMDB提供方便快捷的FMDatabaseQueue類
FMDatabaseQueue的建立
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
八、附:
1.開啟資料庫
int sqlite3_open(
const char *filename, // 資料庫的檔案路徑
sqlite3 **ppDb // 資料庫例項
);
2.執行任何SQL語句
int sqlite3_exec(
sqlite3*, // 一個開啟的資料庫例項
const char *sql, // 需要執行的SQL語句
int (*callback)(void*,int,char**,char**), // SQL語句執行完畢後的回撥
void *, // 回撥函式的第1個引數
char **errmsg // 錯誤資訊
);
3.檢查SQL語句的合法性(查詢前的準備)
int sqlite3_prepare_v2(
sqlite3 *db, // 資料庫例項
const char *zSql, // 需要檢查的SQL語句
int nByte, // SQL語句的最大位元組長度
sqlite3_stmt **ppStmt, // sqlite3_stmt例項,用來獲得資料庫資料
const char **pzTail
);
4.查詢一行資料
int sqlite3_step(sqlite3_stmt*); // 如果查詢到一行資料,就會返回SQLITE_ROW
5.利用stmt獲得某一欄位的值(欄位的下標從0開始)
double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮點資料
int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型資料
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 長整型資料
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // 二進位制文字資料
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字串資料
九、Demo下載路徑
相關文章
- Sqlite學習筆記之Sqlite歷史SQLite筆記
- SQLite學習筆記(一)SQLite筆記
- Android SQLite學習筆記AndroidSQLite筆記
- SQLite語句學習筆記SQLite筆記
- iOS筆記iOS筆記
- Sqlite學習筆記(三)&&WAL效能測試SQLite筆記
- iOS逆向筆記iOS筆記
- iOS 動畫筆記iOS動畫筆記
- iOS Quartz筆記iOSquartz筆記
- iOS Autolayout筆記iOS筆記
- axios使用筆記iOS筆記
- IOS筆記之字典iOS筆記
- IOS筆記之字串iOS筆記字串
- iOS核心動畫筆記iOS動畫筆記
- iOS平時筆記記錄iOS筆記
- iOS Block學習筆記iOSBloC筆記
- Realm ios踩坑筆記iOS筆記
- IOS筆記之陣列iOS筆記陣列
- iOS searchbar 相關筆記iOS筆記
- iOS Runloop學習筆記iOSOOP筆記
- IOS 開發筆記2iOS筆記
- iOS 全屏佈局筆記iOS筆記
- iOS核心動畫筆記2iOS動畫筆記
- IOS開發之sqlite框架FMDBiOSSQLite框架
- iOS開發-sqlite3使用iOSSQLite
- iOS開發之SQLite–C語言介面規範(五):iOS開發使用SQLite例項iOSSQLiteC語言
- Sqlite記錄01_ubuntu 12.04編譯sqliteSQLiteUbuntu編譯
- iOS 多執行緒筆記iOS執行緒筆記
- ios layoutSubviews呼叫隨手筆記iOSView筆記
- IOS筆記之可變字串iOS筆記字串
- Vue學習筆記 —— axiosVue筆記iOS
- iOS筆記之陣列排序iOS筆記陣列排序
- Axios用法–學習筆記iOS筆記
- iOS runtime學習筆記iOS筆記
- iOS 屬性學習筆記iOS筆記
- iOS指標學習筆記iOS指標筆記
- iOS 移動儲存初探(一):SQLiteiOSSQLite
- MJiOS底層筆記--記憶體管理iOS筆記記憶體