iOS开发能用mysql吗_iOS开发之数据库的简单使用
數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí):
plist:writetoFile,條件:只有一個(gè)對(duì)象擁有這個(gè)方法,才能使用plist存儲(chǔ),而且自定義對(duì)象不能用plist存儲(chǔ)
Preference:偏好設(shè)置存儲(chǔ):NSUserDefault存儲(chǔ),好處:不需要關(guān)心文件名,快速存儲(chǔ),底層:就是用一個(gè)字典做存儲(chǔ).壞處:在iOS8之前,都必須做一下同步操作,目的讓內(nèi)存和硬盤同步.
NSCoding(NSKeyedArchiver\NSkeyedUnarchiver):用來(lái)自定義對(duì)象歸檔,自定義對(duì)象需要?dú)w檔:遵守NSCoding協(xié)議,并且實(shí)現(xiàn)對(duì)應(yīng)的方法,告訴系統(tǒng)哪些屬性需要?dú)w檔,哪些屬性需要解檔
SQLite3:好處:1.精確的讀取數(shù)據(jù)2.快速的查詢到自己想要的數(shù)據(jù)3.可以批量的讀取數(shù)據(jù)(可以只讀出一部分?jǐn)?shù)據(jù))
利用場(chǎng)合:1.用來(lái)做離線緩存(只讀出需要展示數(shù)據(jù),可以節(jié)省流量)
本地存儲(chǔ):都是以文件形式存儲(chǔ).
數(shù)據(jù)庫(kù):是以文件的形式存在
數(shù)據(jù)庫(kù)第一步:創(chuàng)建數(shù)據(jù)庫(kù)文件
第二步:創(chuàng)建表 -> 定義一個(gè)模型類
第三步:設(shè)計(jì)字段(這個(gè)表里面有哪些屬性) -> 設(shè)計(jì)模型屬性(主要是看你想存儲(chǔ)哪些屬性)
注意:一定需要一個(gè)主鍵,每條記錄的唯一標(biāo)識(shí),自動(dòng)增長(zhǎng)
第四步:添加記錄(設(shè)置每個(gè)屬性的值) -> 創(chuàng)建模型,并且給模型賦值
1.創(chuàng)建數(shù)據(jù)庫(kù)鏈接,就等于創(chuàng)建數(shù)據(jù)庫(kù)文件
sql語(yǔ)句
DDL語(yǔ)句:創(chuàng)建表格和刪除表格
1.創(chuàng)建表格 create table if not exists 表名(字段名 字段類型,...);
create table t_student (id integer primary key,name text,age integer);
判斷下有沒(méi)有這個(gè)表格
create table if not exists t_student (id integer primary key,name text,age integer);
2.刪除表格 drop table if exists 表名;
drop table if exists t_student;
DML:增,刪,改:操作的是記錄
增 insert into 表名 (字段,...) values(字段值);
如果是字段是字符串類型,必須要用單引號(hào)(')擴(kuò)住
insert into t_student (name,age) values ('a',10);
改 update 表名 set 字段 = 字段值,....
update t_student set name = 'c',age = 18;
刪:會(huì)把t_student表里面的所有記錄全部刪掉
delete from t_student;
刪 delete from 表名;把表里面的所有記錄全部刪除.
3. 條件語(yǔ)句
update t_student set age = 9 where age =1 and name = '左澤';
4.查詢語(yǔ)句(DQL) select 字段 from 表名;
select s.name t_name from t_student s where age = 1 and name = '小澤';
模糊查詢
%:代表所有的值
%3:前面無(wú)論是什么值,只要以3結(jié)尾就OK
3%:后面無(wú)論是什么值,只要以3就Ok
%3%:無(wú)論前面后面是什么,可以有值也可以沒(méi)有值,只要有3就行
113:
第一步:創(chuàng)建數(shù)據(jù)庫(kù)文件
1、導(dǎo)入sqlite3框架
2、導(dǎo)入頭文件
3、創(chuàng)建數(shù)據(jù)庫(kù)文件
1 NSString *docPatch = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)[0];2 NSString *filePatch = [docPatch stringByAppendingPathComponent:@"student.splite"];3 /**4 * 打開(kāi)數(shù)據(jù)庫(kù)5 *6 * @param filename7 * @param ppDb8 *9 * @return 是否打開(kāi)成功,只要打開(kāi)成功,就會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)文件,文件名就是filename,還有會(huì)給數(shù)據(jù)庫(kù)實(shí)例賦值10 */
11 //sqlite3_open(, )12 //把OC中字符串轉(zhuǎn)換成c語(yǔ)言字符串 -> NSUTF8String
13 sqlite3 *db;14 if (sqlite3_open(filePatch.UTF8String, &db)) {15 NSLog(@"打開(kāi)成功");16 }else{17 NSLog(@"打開(kāi)失敗");18 }
二、創(chuàng)建表格語(yǔ)句
1 //創(chuàng)建表格
2 /**3 * 執(zhí)行數(shù)據(jù)庫(kù)語(yǔ)句4 *5 * @param sqlite3 數(shù)據(jù)庫(kù)實(shí)例6 * @param sql sql語(yǔ)句7 * @param callback 執(zhí)行完成的回調(diào)8 void * 回調(diào)的第一個(gè)參數(shù)9 errmsg 錯(cuò)誤信息10 *11 * @return 如果執(zhí)行成功會(huì)返回12 */
13 //sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg);
14 char *errmsg;15 NSString *sql = @"crate table if not exists t_student (id integer primary key, name text not null);";16 //創(chuàng)建表格
17
18 sqlite3 *db;
sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg);19 if(errmsg){20 NSLog(@"創(chuàng)建表格失敗");21 } else{22 NSLog(@"創(chuàng)建表格成功");23 }
三、增-插入(增加)數(shù)據(jù)的語(yǔ)句
char *errmsg;
NSString*sql = [NSString stringWithFormat:@"insert into t_student (name) values('abc');"];//創(chuàng)建表格
sqlite3 *db;
sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg);if(errmsg) {
NSLog(@"插入失敗");
}else{
NSLog(@"插入成功");
}
四、刪-刪除表格語(yǔ)句
char *errmsg;
NSString*sql = [NSString stringWithFormat:@"delete from t_student;"];//創(chuàng)建表格
sqlite3 *db; sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg);if(errmsg) {
NSLog(@"刪除失敗");
}else{
NSLog(@"刪除成功");
}
五、改-改掉表格中某個(gè)字段的語(yǔ)句
char *errmsg;
NSString*sql = [NSString stringWithFormat: @"update t_student set name = 'b';"];//創(chuàng)建表格
sqlite3 *db;
sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg);if(errmsg) {
NSLog(@"更新失敗");
}else{
NSLog(@"更新成功");
}
六、 查- 查找數(shù)據(jù)的語(yǔ)句
查詢跟增刪改不一樣,查詢之前得先有一個(gè)準(zhǔn)備,先看下查詢語(yǔ)句的C語(yǔ)言函數(shù)
1 //查詢跟增刪改不一樣2
3 //1.讓數(shù)據(jù)準(zhǔn)備一下
4 /**5 *6 *7 * db:數(shù)據(jù)實(shí)例8 * zSql:查詢的準(zhǔn)備語(yǔ)句9 int nByte 查詢語(yǔ)句的字節(jié) -1->就會(huì)自動(dòng)計(jì)算字節(jié)10 ppStmt:句柄:操作數(shù)據(jù)庫(kù)里面的記錄11 返回值 準(zhǔn)備成功就返回 SQLITE_OK , 失敗返回 SQLITE_FAIL
12 */
13 sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)
查詢語(yǔ)句代碼實(shí)例
1 sqlite3_stmt *stmt;2 sqlite3 *db;3 NSString *sql = [NSString stringWithFormat:@"select * from t_student;"];4 if (sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL) ==SQLITE_OK) {5 NSLog(@"準(zhǔn)備成功");6 //執(zhí)行句柄,去尋找下一條記錄
7 while (sqlite3_step(stmt) ==SQLITE_ROW) {8 NSLog(@"找到數(shù)據(jù)");9 //獲取哪一列的數(shù)據(jù)
10 const unsigned char *name = sqlite3_column_text(stmt, 1);11 Student *s =[[Student alloc] init];12 s.name = [NSString stringWithUTF8String:(const char *)name];13 [arrM addObject:s];14 }15
16
17 }
總結(jié)
以上是生活随笔為你收集整理的iOS开发能用mysql吗_iOS开发之数据库的简单使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MYSQL的地理信息数据库_国内为什么没
- 下一篇: mysql 唯一索引 性能_普通索引和唯