iOS中 DataBase SQL資料庫 UI_進階

來源:互聯網
上載者:User

iOS中 DataBase SQL資料庫 UI_進階
SQL(Structured query Lauguage) :結構化 查詢 語言
1.建立表格的SQL語句 create table if not exists Teacher(tea_id integer primary key autoincrement,tea_name text,tea_gender text,tea_age integer,tea_salary integer) 增: 2.向表中的欄位下插入資料 insert into Teacher(tea_id,tea_name,tea_gender,tea_age,tea_salary)values(110,'小韓哥','男',18,1000) 查: 3.尋找表格中所有的內容( * 查詢老師表格中所有的資料) select * from Teacher 4.尋找表格中對應欄位的所有資訊( tea_name和tea_gender 下的所有資料) select tea_name,tea_gender from Teacher 5.根據條件為’小韓哥’尋找其資訊 select *from Teacher where tea_name = '小韓哥' 改: 6.根據唯一標示符(主鍵)修改老師性別的資訊 改資料都要通過唯一標示符去改 update Teacher set tea_gender = '女' where tea_id = 111 刪: 7.根據唯一標示符(主鍵)刪除老師性別的資訊 刪除資料都要通過唯一標示符去改 delete from Teacher where tea_id = 110 8.刪除表格中所有的資料 delete from Teacher 9.根據表名刪除整個表格 drop table Teacher —————————————————————————————————————————————————— 下面通過實際例子對資料庫進行增、刪、改、查: 布局如下(不再進行代碼布局):4個textField 5個Button
———————————————————————————————————————— 準備一個Student的model類:

Student.h@interface Student : NSObject@property(nonatomic,assign)NSInteger number;@property(nonatomic,copy)NSString *name;@property(nonatomic,copy)NSString *gender;@property(nonatomic,assign)NSInteger age;@endStudent.m@implementation Student- (void)dealloc{    self.name = nil;    self.gender = nil;    [super dealloc];}- (NSString *)description{    return [NSString stringWithFormat:@%ld %@ %@ %ld, self.number,self.name,self.gender,self.age];}@end
通過單例寫介面並實現方法:
DataBaseHandle.h@class Student;@interface DataBaseHandle : NSObject//建立單例的方法+ (DataBaseHandle *)shareDataBaseHandle;//開啟資料庫的方法- (void)openDataBase;//關閉資料庫的方法- (void)closeDataBase;//插入學生對象的介面- (void)insertStudent : (Student *)student;//返回表格中所有學生的介面- (NSMutableArray *)selectAllStudent;//根據唯一標識學號刪除學生- (void)deleteOneStudentByNumber : (NSInteger )number;//根據唯一標識學號修改學生的姓名- (void)updateStudentGender : (NSString *)gender ByNumber : (NSInteger )number;//根據學號尋找學生- (Student *)selectOneStudentByNumber : (NSInteger)number;@end

DataBaseHandle.m
#import DataBaseHandle.h#import #import Student.h@implementation DataBaseHandlestatic DataBaseHandle *handle = nil;//建立單例的方法+ (DataBaseHandle *)shareDataBaseHandle{    @synchronized(self){        if (handle == nil) {            handle = [[DataBaseHandle alloc]init];            //讓單例對象一建立後就可以訪問資料庫            [handle openDataBase];                    }    }        return handle;}//返回資料庫路徑- (NSString *)dataBasePath{    //將資料庫檔案放到Documents檔案夾下 student.sqlite      return   [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@student.sqlite];}

定義一個全域且在靜態區的資料庫指標

static sqlite3 *db = nil;

開啟資料庫的方法

- (void)openDataBase{    //1.先擷取資料檔案的路徑    NSString *dbPath = [self dataBasePath];    //使用sql之前一定要匯入libsqlite3.0動態連結類庫,其中libsqlite.3.0是捷徑,匯入捷徑的好處,當版本更新的時候,不再匯入新的實體類庫了,因為捷徑永遠指向的是最新的實體類庫(記得匯入標頭檔)        //2.使用sql語句開啟資料庫
    //[dbPath UTF8String] 將OC字串轉化為C語言字串    //sqlite3 就是資料庫指標    //建立資料庫指標db//    sqlite3 *db = nil;        //方法執行完,內不會對資料庫指標db進行初始化,方法執行完,就會存在資料庫檔案    //此方法會先檢測檔案路徑中有沒有對應的資料庫檔案,沒有則建立,有的話直接開啟   int result = sqlite3_open([dbPath UTF8String], &db);    //SQLITE_OK 說明sql是成功    if (result == SQLITE_OK) {//        NSLog(@資料庫開啟成功);                //建立表格        //準備sql語句        NSString *sqlString = @create table if not exists Student(stu_number integer primary key autoincrement,stu_name text,stu_gender text,stu_age integer);        //執行sql語句        sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, NULL);            }else{        NSLog(@資料庫開啟失敗);    }    }

關閉資料庫的方法

 

- (void)closeDataBase{int result =  sqlite3_close(db);    NSLog(@%@,(result == SQLITE_OK) ? @關閉成功:@關閉失敗);}

 

插入學生對象的介面——增

- (void)insertStudent : (Student *)student{    //1.開啟資料庫    [self openDataBase];        //2.準備插入的sql語句    NSString *sqlString = @insert into Student(stu_name,stu_gender,stu_age)values(?,?,?);        //3.建立資料庫管理指標(資料庫管理指令集)    sqlite3_stmt *stmt = nil;    //4.驗證sql語句是否正確    //參數1:資料庫指標,    //參數2:sql語句    //參數3:sql語句的長度寫成-1,自動計算sql語句的最大長度,否則要自己計算長度    //參數4:sql語句的管理指標    //參數5:預留參數,未來使用    //5.拿驗證的結果,判斷是否執行參數綁定的操作    int result =  sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);    if (result == SQLITE_OK) {        NSLog(@插入成功);        //參數1:sql語句管理指標        //參數2:上面sql語句中 ?的位置,?的下標從1開始        //參數3:要繫結資料        //參數4:資料的長度        //綁定欄位stu_name 的資料        sqlite3_bind_text(stmt, 1, [student.name UTF8String], -1, NULL);        //綁定欄位stu_gender 的資料        sqlite3_bind_text(stmt, 2, [student.gender UTF8String], -1, NULL);        //綁定欄位stu_age 的資料        sqlite3_bind_int(stmt, 3, (int)student.age);                //6.讓sql語句執行        sqlite3_step(stmt);    }    //7.釋放掉管理指標    sqlite3_finalize(stmt);        //8.關閉資料庫    [self closeDataBase];}

返回表格中所有學生的介面——查1

- (NSMutableArray *)selectAllStudent{    //1.開啟資料庫    [self openDataBase];    //2.準備sql語句    NSString *sqlString = @select * from Student;    //3.建立管家指標    sqlite3_stmt *stmt = nil;    //4.驗證sql語句是否正確int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);    if (SQLITE_OK == result) {        NSLog(@尋找全部語句成功);                //建立可變數組儲存找到所有的學生對象        NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];                //SQLITE_ROW 如果等於row說明下一行是有資料的,迴圈繼續,如果不等於SQLITE_ROW ,說明下一行沒有資料了,迴圈結束        while (sqlite3_step(stmt) == SQLITE_ROW) {            //依次讀出欄位的資料            //列的編號是從零開始的            //第一列            int number = sqlite3_column_int(stmt, 0);            //第二列           NSString *name = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1) ];            //第三列            NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];            //第四列            int age = sqlite3_column_int(stmt, 3);            //5.建立學生對象並賦值            Student *stu = [[Student alloc]init];            stu.number = number;            stu.name = name;            stu.gender = gender;            stu.age = age;            //添加到數組            [array addObject:stu];            //釋放            [stu release];                    }        //6.釋放管理指標        sqlite3_finalize(stmt);        //關閉資料庫        [self closeDataBase];        return array;    }else{        sqlite3_finalize(stmt);        [self closeDataBase];        return nil;    }    }

 

根據學號尋找學生——查2

 

- (Student *)selectOneStudentByNumber : (NSInteger)number{    //1.開啟資料庫    [self openDataBase];    //2.準備sql語句    NSString *sqlString = @select * from Student where stu_number = ?;    //3.建立管理指標    sqlite3_stmt *stmt = nil;    //4.驗證sql語句是否正確    int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);    //5.根據驗證結果決定執行什麼操作    if (result == SQLITE_OK) {        //6.綁定參數        sqlite3_bind_int(stmt, 1, (int)number);        //7.遍曆表格中的資料        //建立model學生Object Storage Service找到的學生資訊        Student *stu = [[Student alloc]init];        while (sqlite3_step(stmt) == SQLITE_ROW) {            //根據找到的資料給學生的屬性賦值            stu.number = number;            stu.name =[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1)];            stu.gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];            stu.age = sqlite3_column_int(stmt, 3);                 }        //8.釋放管理指標        sqlite3_finalize(stmt);        //9.關閉資料庫        [self closeDataBase];        return [stu autorelease];            }else{        //10.釋放管理指標        sqlite3_finalize(stmt);        //11.關閉資料庫        [self closeDataBase];    }    return nil;}


 

根據唯一標識學號刪除學生——刪

 

- (void)deleteOneStudentByNumber : (NSInteger )number{    //1.開啟資料庫    [self openDataBase];    //2.準備刪除sql語句    NSString *sqlString = @delete from Student where stu_number = ?;    //3.建立資料庫管理指標    sqlite3_stmt *stmt = nil;    //4.驗證sql語句是否正確    int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);    //5.判斷是否執行參數綁定的操作    if (result == SQLITE_OK) {        //6.綁定傳過來的參數        sqlite3_bind_int(stmt, 1, (int)number);        //7.執行sql語句        sqlite3_step(stmt);            }    //8.釋放掉管理指標    sqlite3_finalize(stmt);    //9.關閉資料庫    [self closeDataBase];        }

 

 

根據唯一標識學號修改學生的姓名——改

- (void)updateStudentGender : (NSString *)gender ByNumber : (NSInteger )number{    //1.開啟資料庫    [self openDataBase];    //2.準備sql語句    NSString *sqlString = @update Student set  stu_gender = ? where stu_number = ?;    //3.建立資料庫管理指標    sqlite3_stmt *stmt = nil;    //4.驗證sql語句    int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);    //5.根據驗證的結果決定執行的操作    if (result == SQLITE_OK) {        //6.綁定參數        sqlite3_bind_text(stmt, 1, [gender UTF8String], -1, NULL);        //7.綁定學號        //第二個參數:是 ? 在sql語句中位置,位置從1開始        sqlite3_bind_int(stmt, 2, (int)number);        //8.執行sql語句        sqlite3_step(stmt);           }    //9.釋放管理指標    sqlite3_finalize(stmt);    //10.關閉資料庫    [self closeDataBase];    }

方法的調用:

ViewController.m

 

#import ViewController.h#import DataBaseHandle.h#import Student.h@interface ViewController ()@property (retain, nonatomic) IBOutlet UITextField *numberField;//學號@property (retain, nonatomic) IBOutlet UITextField *nameField;//姓名@property (retain, nonatomic) IBOutlet UITextField *genderField;//性別@property (retain, nonatomic) IBOutlet UITextField *ageField;//年齡@end
1、添加:增

 

 

- (IBAction)insertStudent:(UIButton *)sender {    //判斷有一個控制項中輸入的內容為空白,就不讓它插入資料    if (0 == self.nameField.text.length || 0 == self.genderField.text.length || 0 == self.ageField.text.length) {        return;    }   //建立學生Student 對象,儲存空間中輸入的內容    Student *stu = [[Student alloc]init];    stu.name  = self.nameField.text;    stu.gender = self.genderField.text;    stu.age  = [self.ageField.text integerValue];        [[DataBaseHandle shareDataBaseHandle]insertStudent:stu];    [stu release];   }

2、更新學生資訊:改

 

- (IBAction)updateStudent:(UIButton *)sender {    //擷取輸入框的內容    NSInteger number = [self.numberField.text integerValue];    NSString *gender = self.genderField.text;    //調用根據學號修改gender的方法    [[DataBaseHandle shareDataBaseHandle]updateStudentGender:gender ByNumber:number];}

 

3、刪除學生:刪

 

- (IBAction)deleteStudent:(UIButton *)sender {    NSInteger number = [self.numberField.text integerValue];    //調用根據學號刪除學生的方法    [[DataBaseHandle shareDataBaseHandle]deleteOneStudentByNumber:number];}

 

 

4、尋找全部學生:查1

 

- (IBAction)selectAllStudent:(UIButton *)sender {    //調用尋找所有學生  NSMutableArray *contentArray =  [[DataBaseHandle shareDataBaseHandle]selectAllStudent];    for (Student *stu in contentArray) {        NSLog(@%@,stu);    }    }

 


5、尋找某個學生:查2

 

- (IBAction)selectOneStudent:(id)sender {    //擷取學號輸入框的內容    NSInteger number = [self.numberField.text integerValue];    //調用根據學號擷取學生對象    Student *stu =  [[DataBaseHandle shareDataBaseHandle]selectOneStudentByNumber:number];    NSLog(@%@,stu);}

記得釋放:

 

 

- (void)dealloc {    [_numberField release];    [_nameField release];    [_genderField release];    [_ageField release];    [super dealloc];}

總結:一般步驟:1、開啟資料庫;2、準備sql語句;3、建立管家指標;4、驗證sql語句是否正確;5、根據驗證結果決定執行什麼操作;6、綁定參數;7、遍曆表格中的資料(根據學號尋找學生);8、釋放管理指標;9、關閉資料庫

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.