SQLite數據庫方法總結

步驟1. 導入 SQLite3框架 在 Build Phases 裏的 Link Binary With Libraries 點加號 添加 SQLite3框架
步驟2. 建立父類是 NSObject 的單例類
.h 中
2.1 導入 #import

pragma mark—- 創建數據庫表

        建數據庫表sql語句, 若已經創建過則不會再創建  數據庫自己會判斷。table studentInfo already exists
        // AUTOINCREMENT
        NSString *createTableSql = @"CREATE TABLE ActivityInfo (ID TEXT PRIMARY KEY  NOT NULL, title TEXT, imageUrl TEXT,data BLOB); CREATE TABLE MovieInfo(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, title TEXT, imageUrl TEXT, data BLOB)";
        // 敲出來之後 :  sqliteManager 用數據庫軟件驗證一下
        // 執行非查詢 ,sql 語句 , 可以使用比較便捷的方式 sqlite_exec(); // execute
        sqlite3_exec(db, createTableSql.UTF8String, NULL, NULL, NULL); // c 中是NULL

}
});
return db;
}

2.5 關閉方法實現

+ ( void )close // 關閉數據庫
{
sqlite3_close ( db );
db = nil ; //將指針付空避免野指針操作
}
步驟3 將數據庫與需要將數據保存到數據庫中的 model 類進行關聯 可實現對數據庫的增刪改查操作
.h 中
3.1引入數據庫單例的頭文件
3.2聲明 增刪改查的類方法
.m 中
3.3 增刪改查實現框架
// 1.sqlite3* 需要一個被打開的數據庫指針 .
sqlite3 *db =[DBHelper open];
// 2.需要 sqlite3_stmt sql 語句對象 // stmt 是 statement 語句的意思
sqlite3_stmt *stmt = nil;
// 3.sqlite3_prepare_v2() 預執行方法
int result = sqlite3_prepare_v2(db,”select * from studentInfo/此處填 SQLite 命令語句需要賦值的內容用?替代/”, -1, &stmt, nil);
// 參數: db 數據庫指針, const char *,C語言類型的 sql 字符串,-1系統讀取 sql 字符串的長度爲無窮大,& stmt 語句對象, nil, 沒有執行的 sql 字符串
// 此方法作用是:讓 sql 語句對象 預執行sql 字符串,執行成功纔會 接着操作數據庫
// 4.對預執行進行判斷
if (result == SQLITE_OK) {
// 給?參數賦值,? 注意: 下標從1開始
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, nil);
sqlite3_bind_int(stmt, 2, (int)age);
}
// stmt 所佔空間給釋放掉
sqlite3_finalize(stmt);


附加 增刪改查具體實現
+(NSArray*)findAllStundets
{
NSMutableArray *studentArray = [NSMutableArray array];
// 1.sqlite3*需要一個被打開的數據庫指針.
sqlite3 *db =[DBHelper open];
// 2.需要 sqlite3_stmt sql 語句對象 // stmt 是 statement 語句的意思
sqlite3_stmt *stmt = nil;
// 3.sqlite3_prepare_v2() 預執行方法
int result = sqlite3_prepare_v2(db,”select * from studentInfo/此處填 SQLite 命令語句需要賦值的內容用?替代/”, -1, &stmt, nil);
// 參數: db 數據庫指針, const char *,C語言類型的 sql 字符串,-1系統讀取 sql 字符串的長度爲無窮大,& stmt 語句對象, nil, 沒有執行的 sql 字符串
// 此方法作用是:讓 sql 語句對象 預執行sql 字符串,執行成功纔會 接着操作數據庫
// 4.對預執行進行判斷
if (result == SQLITE_OK) {
// 5.執行語句 sqlite3_step, 查詢需要對 返回結果進行判斷
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 查詢操作的sqlite3_step(stmt)會返回當前行,SQLITE_ROW,並且指向下一行,直到下面沒有數據,返回SQLITE_ DOWN不再是 SQLITE_ROW
// 6.通過 sqlite_column_類型() 逐列取值
// 姓名
const unsigned char *cName = sqlite3_column_text(stmt, 1);
// 年齡
int age = sqlite3_column_int(stmt, 2);
int sid = sqlite3_column_int(stmt, 0);
// 把 c 字符串 轉化爲 oc 字符串
NSString name = [NSString stringWithUTF8String:(const char)cName];
// 根據獲得值創建 student 變量
Student *student = [ Student studnetWithSid:sid name:name age:age];
[studentArray addObject:student];
}
}
// stmt 所佔空間給釋放掉
sqlite3_finalize(stmt);

return studentArray;

}
// 查某一個
+ (Student*)findStudentBySid:(NSInteger)sid
{
Student *student = nil;
sqlite3 *db = [DBHelper open];
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(db, “select * from studentInfo where sid = ?”, -1, &stmt, nil);
if (result == SQLITE_OK) {
// 給?參數賦值,? 注意: 下標從1開始
sqlite3_bind_int(stmt, 1, (int)sid);
// 6.執行
sqlite3_step(stmt);
NSString name = [NSString stringWithUTF8String:(const char) sqlite3_column_text(stmt, 1)];
int age = sqlite3_column_int(stmt, 2);
student = [Student studnetWithSid:sid name:name age:age];
}
// stmt 所佔空間給釋放掉
sqlite3_finalize(stmt);
return student;
}
// 插入一條學生數據
+ (void)insertStudnetForName:(NSString*)name age:(NSInteger)age
{
sqlite3 *db = [DBHelper open];
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(db, “insert into studentInfo (name,age) values(?,?)”, -1, &stmt, nil);
if (result == SQLITE_OK) {
// 給?參數賦值,? 注意: 下標從1開始
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, nil);
sqlite3_bind_int(stmt, 2, (int)age);
// 6.執行
if (sqlite3_step(stmt) == SQLITE_OK) {
NSLog(@”數據插入成功!”);
}
}
sqlite3_finalize(stmt);

}
// 修改學生數據
+ (void)updataStudentForSid:(NSInteger)sid newName:(NSString*)newName newAge:(NSInteger)newAge
{
sqlite3 *db = [DBHelper open];
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(db, “update studentInfo set age = ? where sid = ?”, -1, &stmt, nil);
if (result == SQLITE_OK) {
// 給?參數賦值,? 注意: 下標從1開始
sqlite3_bind_int(stmt, 2, (int)sid);
sqlite3_bind_int(stmt, 1, (int)newAge);
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@”修改成功”);
}
}
sqlite3_finalize(stmt);
}
// 刪除學生數據,根據 sid
+ (void)deleteStudentForSid:(NSInteger)sid
{
sqlite3 *db = [DBHelper open];
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(db, “delete from studentInfo where sid = ?”, -1, &stmt, nil);
if (result == SQLITE_OK) {
// 給?參數賦值,? 注意: 下標從1開始
sqlite3_bind_int(stmt, 1, (int)sid);
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@”修改成功”);
}
}
sqlite3_finalize(stmt);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章