Sqlite語(yǔ)句



// 單例方法 *** --- 采用類(lèi)方法

+(instancetype)initData

{

// 判斷,如果沒(méi)有創(chuàng)建靜態(tài)變量,就創(chuàng)建

if (!sqlData) {

sqlData = [[SqlData alloc] init];

}

return sqlData;

}

// 初始化數(shù)據(jù)庫(kù) ***

-(void)initSql

{

// 默認(rèn)數(shù)據(jù)存儲(chǔ)在沙盒里

// 獲取存儲(chǔ)沙盒的路徑 --- Documents目錄(路徑)

NSString *str = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];

// 拼接 ---- 數(shù)據(jù)庫(kù)的名字

NSString *strName = [str stringByAppendingString:@"/1511E.db"];

// 對(duì)數(shù)據(jù)庫(kù)進(jìn)行判斷 ---- UTF8String:轉(zhuǎn)換為中文的格式 ---- **:指的是指針指向的對(duì)象的地址 --- SQLITE_OK:如果是這個(gè)狀態(tài),表示數(shù)據(jù)庫(kù)打開(kāi)成功

if (sqlite3_open([strName UTF8String], &db) == SQLITE_OK) {

NSLog(@"數(shù)據(jù)庫(kù)打開(kāi)成功");

// 數(shù)據(jù)庫(kù)的表格

[self initTable];

}else{

NSLog(@"數(shù)據(jù)庫(kù)打開(kāi)失敗");

}

}

// 初始化數(shù)據(jù)庫(kù)表格 ***

-(void)initTable

{

// 使用數(shù)據(jù)庫(kù)里的 sql 語(yǔ)句

// 初始化數(shù)據(jù)庫(kù)表格 -- 格式 -- create table if not exists 表名(主鍵盤(pán)id integer primary key, 所有的數(shù)據(jù)類(lèi)型(*name, *age, *sex, *height, *weight)); null 主鍵自增

// 創(chuàng)建表格時(shí),如果沒(méi)有執(zhí)行 exists 就進(jìn)行創(chuàng)建

// const 常量 -- 不能發(fā)生改變的量 --- ""引號(hào)中不可以使用中文 --- exists后的表名可隨便定義

const char *sql = "create table if not exists ClassMessage(classid integer primary key, name text, age text, sex text, height text, weight text)";

// 預(yù)編譯數(shù)據(jù)庫(kù)的指針

sqlite3_stmt *stmt;

// 綁定數(shù)據(jù)庫(kù)指針的一個(gè)接口 --- 0 表示為空,-1 自動(dòng)匹配長(zhǎng)度,1 固定范圍,定義多少,就是多少

// 打開(kāi)數(shù)據(jù)庫(kù)的接口 --- 搭建橋梁

sqlite3_prepare_v2(db, sql, -1, &stmt, nil);

// 執(zhí)行預(yù)編譯接口 -- step:執(zhí)行

//? ? sqlite3_step(stmt);

// 判斷 一行一行的去判斷是否執(zhí)行完成

if (sqlite3_step(stmt) == SQLITE_DONE) {

NSLog(@"數(shù)據(jù)庫(kù)表格創(chuàng)建成功");

}else{

NSLog(@"數(shù)據(jù)庫(kù)表格創(chuàng)建失敗");

}

// 銷(xiāo)毀接口 -- 防止有空指針和野指針,造成程序崩潰

sqlite3_finalize(stmt);

}

// 添加數(shù)據(jù)

-(void)addData:(ClassMessage *)data

{

// 添加數(shù)據(jù)的 sql 語(yǔ)句:insert into 表名 values(null,?,?,?,?,?);

const char *sql = "insert into ClassMessage values(null,?,?,?,?,?)";

// 預(yù)編譯數(shù)據(jù)庫(kù)的指針

sqlite3_stmt *stmt;

// 綁定數(shù)據(jù)庫(kù)指針的一個(gè)接口 --- 0 表示為空,-1 自動(dòng)匹配長(zhǎng)度,1 固定范圍,定義多少,就是多少

// 打開(kāi)數(shù)據(jù)庫(kù)的接口 --- 搭建橋梁

sqlite3_prepare_v2(db, sql, -1, &stmt, nil);

// 調(diào)用添加數(shù)據(jù)庫(kù)的接口

// 綁定數(shù)據(jù)庫(kù)接口? ---- transient

sqlite3_bind_text(stmt, 1, [data.name UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_text(stmt, 2, [data.age UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_text(stmt, 3, [data.sex UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_text(stmt, 4, [data.height UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_text(stmt, 5, [data.weight UTF8String], -1, SQLITE_TRANSIENT);

// 執(zhí)行預(yù)編譯接口 -- step:執(zhí)行

sqlite3_step(stmt);

// 銷(xiāo)毀接口 -- 防止有空指針和野指針,造成程序崩潰

sqlite3_finalize(stmt);

}

// 修改數(shù)據(jù)

-(void)changeData:(ClassMessage *)data

{

// 使用 sql 語(yǔ)句的格式:update 表名 set 所有的數(shù)據(jù)類(lèi)型 where 主鍵id = ?

const char *sql = "update ClassMessage set name = ?, age = ?, sex = ?, height = ?, weight = ? where classid = ?";

// 預(yù)編譯指針(作用:鏈接到數(shù)據(jù)庫(kù))

sqlite3_stmt *stmt;

// 綁定數(shù)據(jù)庫(kù)指針的接口

sqlite3_prepare_v2(db, sql, -1, &stmt, nil);

// 綁定數(shù)據(jù)庫(kù)接口? ---- transient

sqlite3_bind_text(stmt, 1, [data.name UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_text(stmt, 2, [data.age UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_text(stmt, 3, [data.sex UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_text(stmt, 4, [data.height UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_text(stmt, 5, [data.weight UTF8String], -1, SQLITE_TRANSIENT);

// 綁定主鍵id

sqlite3_bind_int(stmt, 6, (int)(data.classid));

// 執(zhí)行預(yù)編譯接口 -- step:執(zhí)行

sqlite3_step(stmt);

// 銷(xiāo)毀接口 -- 防止有空指針和野指針,造成程序崩潰

sqlite3_finalize(stmt);

}

// 刪除數(shù)據(jù)

-(void)deleteData:(NSInteger)deldata

{

// sql 語(yǔ)句: delete from 表名 where 表名的主鍵id = ?

const char *sql = "delete from ClassMessage where classid = ?";

// 預(yù)編譯指針(作用:鏈接到數(shù)據(jù)庫(kù))

sqlite3_stmt *stmt;

// 綁定數(shù)據(jù)庫(kù)指針的接口

sqlite3_prepare_v2(db, sql, -1, &stmt, nil);

// 刪除綁定主鍵id -- 即刪除數(shù)據(jù)

sqlite3_bind_int(stmt, 1, (int)(deldata));

// 執(zhí)行預(yù)編譯接口 -- step:執(zhí)行

sqlite3_step(stmt);

// 銷(xiāo)毀接口 -- 防止有空指針和野指針,造成程序崩潰

sqlite3_finalize(stmt);

}

// 查詢(xún)數(shù)據(jù)

-(NSMutableArray *)showAllArr

{

// sql 語(yǔ)句:select *from 表名 --- 查詢(xún)?nèi)?/p>

// sql 語(yǔ)句:select *from 表名 where 主鍵id = ? ---- 查詢(xún)單行

const char *sql = "select *from ClassMessage";

// 預(yù)編譯指針(作用:鏈接到數(shù)據(jù)庫(kù))

sqlite3_stmt *stmt;

// 綁定數(shù)據(jù)庫(kù)指針的接口

sqlite3_prepare_v2(db, sql, -1, &stmt, nil);

// 所有的數(shù)組都是以數(shù)組的形式存儲(chǔ)的

// 創(chuàng)建數(shù)組

NSMutableArray *arr = [NSMutableArray array];

// 執(zhí)行數(shù)據(jù)庫(kù)中的預(yù)編譯接口? ----- SQLITE_ROW 表示一行一行的去查詢(xún)數(shù)據(jù)庫(kù)中的數(shù)據(jù)

while (sqlite3_step(stmt) == SQLITE_ROW) {

ClassMessage *classData = [[ClassMessage alloc] init];

// 找到表格中的主鍵 ---- sqlite3_column_XXX (XXX表示數(shù)據(jù)類(lèi)型) 表示返回當(dāng)前行(指的是列的數(shù)據(jù))

classData.classid = sqlite3_column_int(stmt, 0);

classData.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];

classData.age = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];

classData.sex = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)];

classData.height = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 4)];

classData.weight = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 5)];

// 將數(shù)據(jù)添加到數(shù)組里

[arr addObject:classData];

}

// 銷(xiāo)毀接口 -- 防止有空指針和野指針,造成程序崩潰

sqlite3_finalize(stmt);

// 返回

return arr;

}

// 關(guān)閉數(shù)據(jù) ***

-(void)closeSql

{

sqlite3_close(db);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容