數據持久化三之SQlite3

使用數據庫的步驟ios使用的數據庫是sqlite3ios

UIKit框架並不支持sqlite3,須要導入一個支持sqlite的庫sql

1.建立一個數據庫文件,若是已經有了只須要打開數據庫文件數據庫

2.建立一張表網絡

3.對錶的數據進行增刪改查app

#import "ViewController.h"框架

#import <sqlite3.h>dom

@interface ViewController (){函數

    //聲明一個數據庫變量.net

    sqlite3 *_db;指針

}

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

  

    //1.建立數據庫

    [self createDB];

 

    //2.建立表

    [self createTable];

    

    //3.插入數據

    [self insertData];

  

    //4.刪除數據

    [self deleteData];

    

    //5.更新數據

    [self updateData];

    

    //6.查找數據

    [self selectData];

}

#pragma mark - 建立/打開數據庫

- (void) createDB{

    //1.建立數據庫的路徑(實際開發過程當中是沙盒目錄下的一個路徑);

    const char * path = "/Users/fanjuan/Desktop/my files/網絡/day6-數據庫/數據庫文件/user.sqlite";

    

    //2.打開一個數據庫文件(若是數據庫不存在就建立一個新的);

    //參數1:數據庫文件的路徑

    //參數2:指向數據庫的指針的地址,表明當前打開或者建立的數據庫

    //返回值:打開或者建立是否成功

     int ret = sqlite3_open(path, &_db);

    //3.判斷數據庫打開建立是否成功

    //SQLITE_OK專門用來判斷數據庫操做成功的宏

    if (ret == SQLITE_OK) {

        

        NSLog(@"數據庫打開/建立成功");

        

    }else{

        

        NSLog(@"數據庫打開/建立失敗");

        

    }

}

#pragma mark - 建立表

- (void)createTable{

    

    //1.建立一個建立表的sql語句

    const char *sql = "CREATE TABLE  IF NOT EXISTS  t_user(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL DEFAULT 22,score real DEFAULT 0); ";

    //sqlite3_exec 專門用來執行DDL,DML語句的方法

    //DQL語句不可使用這個函數;

    //參數1:數據庫(必須是已經打開的數據庫);

    //參數2:須要執行的sql語句

    //參數5:錯誤信息

    //返回值:是否成功執行sql語句

    //2.執行建立表的sql語句;

   int ret = sqlite3_exec(_db, sql, NULL, NULL, NULL);

        //3.判斷表是否建立成功

    if (ret == SQLITE_OK)

        NSLog(@"建立成功");

    }else{

             NSLog(@"建立表失敗");

    }  

}

#pragma mark - 插入數據

- (void) insertData{

    //1.建立插入數據的sql語句

    const char *sql = "INSERT INTO t_user (name,age,score) VALUES ('fanjuan',22,99);";

     

    //一次插入多條數據

    NSMutableString *mstr = [NSMutableString string];

    

    for (int i=0; i<20; i++) {

        NSString *str = [NSString stringWithFormat:@"INSERT INTO t_user (name,age,score) VALUES ('fanjuan%d',%d,%f);",i,arc4random() % 10 + 10,(float)(arc4random()%101)];

        

        [mstr appendString:str];

    }

    

    const char *sql2 = [mstr UTF8String];

    //2.執行插入數據的sql語句

    int ret = sqlite3_exec(_db, sql2, NULL, NULL, NULL);

    

    //3.判斷是否成功

    if (ret == SQLITE_OK) {

        NSLog(@"插入數據成功");

    }else{

        NSLog(@"插入數據失敗");

    }

  }

#pragma mark - 刪除數據

- (void) deleteData{

    

    //1.建立sql語句

    const char *sql = "DELETE FROM t_user WHERE name ='fanjuan';";

    //2.執行sql語句

   int ret =   sqlite3_exec(_db, sql, NULL, NULL, NULL);

    

    //3.判斷是否成功

    if (ret == SQLITE_OK) {

        NSLog(@"刪除數據成功");

    }else{

        NSLog(@"刪除數據失敗");

    }

    

}

#pragma mark - 更新數據

- (void)updateData{

    

    //1.建立sql語句

    const char *sql = "UPDATE t_user SET score = 99 WHERE score < 80;";

    

    //2.執行sql語句

    int ret = sqlite3_exec(_db, sql, NULL, NULL, NULL);

    

    //3.判斷是否成功

    if (ret == SQLITE_OK) {

        NSLog(@"更新數據成功");

    }else{

        NSLog(@"更新數據失敗");

    }

    

}

#pragma mark 查詢數據

- (void)selectData{

    

    //1.建立sql語句

    const char *sql = "SELECT * FROM t_user;";

    

    //2.執行語句

    //參數1:數據庫

    //參數2:數據查詢的sql語句

    //參數3:sql語句的長度(傳入-1自動計算)

    //參數4:結果集(專門用來存放結果的容器)

    //參數5:null

 

   // 建立存放結果集指針

    sqlite3_stmt *stmt;

    int ret=  sqlite3_prepare_v2(_db

                       , sql, -1, &stmt, NULL);

    //3.判斷查詢是否成功;

    if (ret == SQLITE_OK) {

        

        NSLog(@"查詢成功");

    

    //將數據從結果 集中拿出來

        //遍歷結果集中的數據

        while (sqlite3_step(stmt) == SQLITE_ROW) {

            

            //拿到查詢結果的數據

            //參數1:結果集指針

            //參數2:列標號(從0開始)

          const unsigned   char *name = sqlite3_column_text(stmt,1);

            

         int age = sqlite3_column_int(stmt,2);

            

            double score = sqlite3_column_double(stmt, 3);

            NSLog(@"%s-%d-%.2lf",name,age,score);

            

        }

        

    

    }else{

        NSLog(@"查詢失敗");

    }

    

}

@end

相關文章
相關標籤/搜索