你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS中 DataBase SQL數據庫 UI_高級

iOS中 DataBase SQL數據庫 UI_高級

編輯:IOS開發綜合
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;
@end

Student.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 DataBaseHandle

static 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學生對象存儲找到的學生信息
        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、關閉數據庫

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved