日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

iOS:面向对象的思想使用sqlite数据库

發布時間:2024/7/19 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS:面向对象的思想使用sqlite数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SQLite支持的常見數據類型如下所示。 –INTEGER?有符號的整數類型 –REAL?浮點類型 –TEXT?字符串類型,采用UTF-8和UTF-16字符編碼 –BLOB?二進制大對象類型,能夠存放任何二進制數據 ? (C語言中)使用步驟: 1.新建項目時,先導入系統框架(C語言). (libsqlite3) 2.頭文件#import<sqlite3.h> 3. sqlite3_open(fileName.UTF8String, &_db);?打開或者創建一個數據

? ? *_db自己定義一個sqlite3的成員變量.進行增刪改查時要用

? 4.sqlite3_exec(_db, sql, NULL, NULL,&error); ?//不帶結果集的語句,只是對表做操作,不會返回出結果 *該函數可進行insert,delete,update操作. 5.查詢操作select.?//帶結果集的查詢語句,會返回出結果,從表中查詢到的數據都會放到stmt結構體中 *sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);做查詢前準備,檢測SQL語句是否正確. *sqlite3_step(stmt) 提取查詢到的數據,一次提取一條.//通過循環可以取出所有數據 *sqlite3_column_text(stmt, 0)取出第0列的數據. 6.關閉數據庫?sqlite3_close(sqlite3?*); ———————————————————————————————————————————————————— ———————————————————————————————————————————————————— 執行帶參數的SQL語句

NSString *sqlStr = @"INSERT OR REPLACE INTO note (cdate,content) VALUES (?,?)";

sqlite3_stmt *statement;
//預處理過程,產生結果集
if (sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &statement,?

NULL) == SQLITE_OK)

?{

?NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
? NSString *nsdate = [dateFormatter stringFromDate:model.date];?

? //綁定參數開始
? sqlite3_bind_text(statement, 1, [nsdate UTF8String], -1, NULL); ?sqlite3_bind_text(statement, 2, [model.content UTF8String],?

-1, ? ?NULL);

? //執行插入
if (sqlite3_step(statement) != SQLITE_DONE)

?{ ?

NSAssert(NO, @"插入數據失敗。"); }?

?}?

}

//清理結果集,防止內存泄露

?sqlite3_finalize(statement);

?

單例模式:(這里主要用來保證初始化的數據庫是唯一的,只要創建了一次,那么它就不會被再創建)

+ (NoteDAO*)sharedManager?

{?

? static?dispatch_once_t?once;?

??dispatch_once(&once, ^{?

??sharedManager?= [[self?alloc]?init];?

? [sharedManager???createEditableCopyOfDatabaseIfNeeded];?}

??);

? ?return?sharedManager;

?}

?

舉例代碼如下:

Student.h

1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject 4 @property (assign,nonatomic)NSInteger ID; 5 @property (copy,nonatomic)NSString *name; 6 @property (assign,nonatomic)NSInteger age; 7 @property (assign,nonatomic)char gender; 8 @property (assign,nonatomic)float math; 9 @property (assign,nonatomic)float english; 10 @property (assign,nonatomic)float chinese; 11 @end

?

Student.m

1 #import "Student.h" 2 3 @implementation Student 4 -(NSString*)description 5 { 6 return [NSString stringWithFormat:@"ID:%ld,name:%@,age:%ld,gender:%c,math:%.2lf,english:%.2lf,chinese:%.2lf",_ID,_name,_age,_gender,_math,_english,_chinese]; 7 } 8 @end

?

StudentDAO.h(對每一個實體類的數據庫封裝起來,就采用這種XXXDAO.h/m的命名風格)

1 #import <Foundation/Foundation.h> 2 #import <sqlite3.h> 3 @class Student; 4 @interface StudentDAO : NSObject 5 { 6 sqlite3 *_db; 7 } 8 //單例的方法 9 +(StudentDAO*)shareManager; 10 11 //初始化數據庫:創建表,添加數據 12 -(void)initDb; 13 14 //添加學生記錄 15 -(BOOL)addStudent:(Student *)stu; 16 17 //刪除學生記錄 18 -(BOOL)deleteStudentByName:(NSString *)name; 19 20 //修改學生記錄 21 -(BOOL)updateStudnet:(Student*)stu; 22 23 //查詢學生記錄 24 //1.查詢全部 25 -(NSArray *)queryStudentAll; 26 //2.查詢符合條件的 27 -(Student *)queryStudentByName:(NSString*)name; 28 29 @end

?

StudentDAO.m

1 #import "StudentDAO.h" 2 #import "Student.h" 3 4 5 static StudentDAO *instance = nil; 6 @implementation StudentDAO 7 8 //對象只創建一次 9 +(StudentDAO*)shareManager 10 { 11 static dispatch_once_t once; 12 dispatch_once(&once, ^{ 13 //只執行一次 14 instance = [StudentDAO new]; 15 16 [instance initDb]; 17 }); 18 19 return instance; 20 } 21 22 //執行不返回結果集的sql語句 23 -(BOOL)execSql:(NSString *)sql 24 { 25 char *errmsg = NULL; 26 //增刪改操作 27 sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg); 28 29 if(errmsg) 30 { 31 return NO; 32 } 33 else 34 { 35 return YES; 36 } 37 } 38 //創建數據庫文件路徑 39 -(NSString*)pathForDB 40 { 41 NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 42 NSString *documentPath = [dirs lastObject]; 43 44 //NSLog(@"%@",documentPath); 45 46 return [documentPath stringByAppendingPathComponent:@"student.db"]; 47 } 48 49 //初始化數據庫:創建表,添加數據 50 -(void)initDb 51 { 52 //打開數據庫 53 //sqlite3_open(fileName.UTF8String,&_db);打開或創建一個數據 54 //*_db自己定義一個sqlite3的成員變量.進行增刪改查時要用 55 if(sqlite3_open([[self pathForDB] UTF8String], &_db) == SQLITE_OK) 56 { 57 //創建學生表 58 if([self execSql:@"create table student (id integer primary key autoincrement,name text,age integer,gender integer,math real,english real,chinese real)"]) 59 { 60 //表中添加測試數據 61 for(int i=0; i<5; i++) 62 { 63 Student *stu = [Student new]; 64 stu.name = [NSString stringWithFormat:@"stu%d",i+1]; 65 stu.age = 20+i; 66 stu.gender = 'M'; 67 stu.math = 80+i; 68 stu.english = 90+i; 69 stu.chinese = 80+i; 70 71 [self addStudent:stu]; 72 } 73 } 74 //關閉數據庫 75 sqlite3_close(_db); 76 } 77 } 78 79 //添加學生記錄 80 -(BOOL)addStudent:(Student *)stu 81 { 82 NSString *insertSql = @"insert into student (name,age,gender,math,english,chinese) values(?,?,?,?,?,?)"; 83 84 //打開數據庫 85 if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK) 86 { 87 //準備結果集 88 //提取數據一次一條 89 sqlite3_stmt *Pstmt = NULL; 90 //查詢前準備,看是否正確 91 if(sqlite3_prepare_v2(_db, [insertSql UTF8String], -1, &Pstmt, NULL) == SQLITE_OK) 92 { 93 //綁定參數 94 sqlite3_bind_text(Pstmt, 1, [stu.name UTF8String], -1, NULL); 95 sqlite3_bind_int(Pstmt, 2, (int)stu.age); 96 sqlite3_bind_int(Pstmt, 3, stu.gender); 97 sqlite3_bind_double(Pstmt, 4, stu.math); 98 sqlite3_bind_double(Pstmt, 5, stu.english); 99 sqlite3_bind_double(Pstmt, 6, stu.chinese); 100 101 //執行SQL語句 102 if(sqlite3_step(Pstmt) == SQLITE_DONE) 103 { 104 return YES; 105 } 106 } 107 //清理結果集 108 sqlite3_finalize(Pstmt); 109 110 //關閉數據庫 111 sqlite3_close(_db); 112 } 113 return NO; 114 } 115 116 //刪除學生記錄 117 -(BOOL)deleteStudentByName:(NSString *)name 118 { 119 NSString *sql = @"delete from student where name = ?"; 120 121 //打開數據庫 122 if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK) 123 { 124 //準備結果集 125 sqlite3_stmt *Pstmt = NULL; 126 if(sqlite3_prepare_v2(_db, [sql UTF8String], -1, &Pstmt, NULL)== SQLITE_OK) 127 { 128 //綁定參數 129 sqlite3_bind_text(Pstmt, 1, [name UTF8String], -1, NULL); 130 131 132 //執行SQL語句 133 if(sqlite3_step(Pstmt) == SQLITE_DONE) 134 { 135 return YES; 136 } 137 } 138 //清理結果集 139 sqlite3_finalize(Pstmt); 140 141 //關閉數據庫 142 sqlite3_close(_db); 143 } 144 return NO; 145 } 146 147 //修改學生記錄 148 -(BOOL)updateStudnet:(Student*)stu 149 { 150 NSString *sql = @"update student set math = ? where name = ?"; 151 152 //打開數據庫 153 if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK) 154 { 155 //準備結果集 156 sqlite3_stmt *Pstmt = NULL; 157 if(sqlite3_prepare_v2(_db, [sql UTF8String], -1, &Pstmt, NULL) == SQLITE_OK) 158 { 159 //綁定參數 160 sqlite3_bind_double(Pstmt,1,stu.math); 161 sqlite3_bind_text(Pstmt, 2, [stu.name UTF8String], -1, NULL); 162 163 //執行SQL語句 164 if(sqlite3_step(Pstmt) == SQLITE_DONE) 165 { 166 return YES; 167 } 168 } 169 //清理結果集 170 sqlite3_finalize(Pstmt); 171 172 //關閉數據庫 173 sqlite3_close(_db); 174 } 175 return NO; 176 } 177 178 //查詢學生記錄 179 //1.查詢全部 180 -(NSArray *)queryStudentAll 181 { 182 NSMutableArray *arrayM = [NSMutableArray array]; 183 184 //打開數據庫 185 if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK) 186 { 187 //準備結果集 188 sqlite3_stmt *Pstmt = NULL; 189 if(sqlite3_prepare_v2(_db, "select * from student", -1, &Pstmt, NULL) == SQLITE_OK) 190 { 191 //遍歷結果集 192 while (sqlite3_step(Pstmt) == SQLITE_ROW) 193 { 194 Student *stu = [Student new]; 195 196 stu.ID = sqlite3_column_int(Pstmt, 0); 197 stu.name = [NSString stringWithFormat:@"%s",sqlite3_column_text(Pstmt, 1)]; 198 stu.age = sqlite3_column_int(Pstmt, 2); 199 stu.gender = sqlite3_column_int(Pstmt, 3); 200 stu.math = sqlite3_column_double(Pstmt, 4); 201 stu.english = sqlite3_column_double(Pstmt, 5); 202 stu.chinese = sqlite3_column_double(Pstmt, 6); 203 204 [arrayM addObject:stu]; 205 } 206 } 207 //清理結果集 208 sqlite3_finalize(Pstmt); 209 210 //關閉數據庫 211 sqlite3_close(_db); 212 } 213 return arrayM; 214 } 215 //2.查詢符合條件的 216 -(Student *)queryStudentByName:(NSString*)name 217 { 218 Student *stu; 219 NSString *sql = @"select * from student where name = ?"; 220 221 //打開數據庫 222 if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK) 223 { 224 //準備結果集 225 sqlite3_stmt *Pstmt = NULL; 226 if(sqlite3_prepare_v2(_db, [sql UTF8String], -1, &Pstmt, NULL) == SQLITE_OK) 227 { 228 //綁定參數 229 sqlite3_bind_text(Pstmt, 1, [name UTF8String], -1, NULL); 230 231 //執行SQL語句 232 if(sqlite3_step(Pstmt) == SQLITE_ROW) 233 { 234 stu = [Student new]; 235 236 stu.ID = sqlite3_column_int(Pstmt, 0); 237 stu.name = [NSString stringWithFormat:@"%s",sqlite3_column_text(Pstmt, 1)]; 238 stu.age = sqlite3_column_int(Pstmt, 2); 239 stu.gender = sqlite3_column_int(Pstmt, 3); 240 stu.math = sqlite3_column_double(Pstmt, 4); 241 stu.english = sqlite3_column_double(Pstmt, 5); 242 stu.chinese = sqlite3_column_double(Pstmt, 6); 243 } 244 } 245 246 //清理結果集 247 sqlite3_finalize(Pstmt); 248 249 //關閉數據庫 250 sqlite3_close(_db); 251 } 252 return stu;; 253 } 254 @end

?

ViewController.m

1 #import "ViewController.h" 2 #import "Student.h" 3 #import "StudentDAO.h" 4 5 @interface ViewController () 6 7 @end 8 9 @implementation ViewController 10 11 - (void)viewDidLoad { 12 [super viewDidLoad]; 13 //測試stuDAO 14 //創建單例對象 15 StudentDAO *stuDAO = [StudentDAO shareManager]; 16 17 18 //查詢所有的記錄 19 NSArray *students = [stuDAO queryStudentAll]; 20 NSLog(@"%@",students); 21 22 //刪除一條記錄 23 [stuDAO deleteStudentByName:@"stu3"]; 24 25 //修改記錄 26 Student *stu = [Student new]; 27 stu.name = @"stu4"; 28 stu.math = 94.5f; 29 [stuDAO updateStudnet:stu]; 30 31 32 //通過名字查詢學生 33 Student *stu2 = [stuDAO queryStudentByName:@"stu5"]; 34 NSLog(@"%@",stu2); 35 36 //查詢所有的記錄 37 students = [stuDAO queryStudentAll]; 38 NSLog(@"%@",students); 39 } 40 @end

?

?

轉載于:https://www.cnblogs.com/XYQ-208910/p/4824713.html

總結

以上是生活随笔為你收集整理的iOS:面向对象的思想使用sqlite数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。