iOS中SQLite3使用實例


 

 

 

// static的作用:能保證_db這個變量只被IWStudentTool.m直接訪問

static sqlite3 *_db;

 

+ (void)initialize

{

    // 0.獲得沙盒中的數據庫文件名

    NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];

    

    // 1.創建(打開)數據庫(如果數據庫文件不存在,會自動創建)

    int result = sqlite3_open(filename.UTF8String, &_db);

    if (result == SQLITE_OK) {

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

        

        // 2.創表

        const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);";

        char *errorMesg = NULL;

        int result = sqlite3_exec(_db, sql, NULL, NULL, &errorMesg);

        if (result == SQLITE_OK) {

            NSLog(@"成功創建t_student");

        } else {

            NSLog(@"創建t_student表失敗:%s", errorMesg);

        }

    } else {

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

    }

}

 

+ (BOOL)addStudent:(IWStudent *)student

{

    NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age) values('%@', %d);", student.name, student.age];

 

    char *errorMesg = NULL;

    int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg);

  

    

    return result == SQLITE_OK;

}

 

+ (NSArray *)students

{

    // 0.定義數組

    NSMutableArray *students = nil;

    

    // 1.定義sql語句

    const char *sql = "select id, name, age from t_student;";

    

    // 2.定義一個stmt存放結果集

    sqlite3_stmt *stmt = NULL;

    

    // 3.檢測SQL語句的合法性

    int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);

    if (result == SQLITE_OK) {

        NSLog(@"查詢語句是合法的");

        students = [NSMutableArray array];

        

        // 4.執行SQL語句,從結果集中取出數據

        while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查詢到一行數據

            // 獲得這行對應的數據

            

            IWStudent *student = [[IWStudent alloc] init];

            

            // 獲得第0列的id

            student.ID = sqlite3_column_int(stmt, 0);

            

            // 獲得第1列的name

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

            student.name = [NSString stringWithUTF8String:(const char *)sname];

            

            // 獲得第2列的age

            student.age = sqlite3_column_int(stmt, 2);

            

            // 添加到數組

            [students addObject:student];

        }

    } else {

        NSLog(@"查詢語句非合法");

    }

    

    return students;

}

 

+ (NSArray *)studentsWithCondition:(NSString *)condition

{

    // 0.定義數組

    NSMutableArray *students = nil;

    

    // 1.定義sql語句

    const char *sql = "select id, name, age from t_student where name like ?;";

    

    // 2.定義一個stmt存放結果集

    sqlite3_stmt *stmt = NULL;

    

    // 3.檢測SQL語句的合法性

    int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);

    if (result == SQLITE_OK) {

        NSLog(@"查詢語句是合法的");

        students = [NSMutableArray array];

        

        // 填補占位符的內容

        NSString *newCondition = [NSString stringWithFormat:@"%%%@%%", condition];

//        NSLog(@"%@", newCondition);

        sqlite3_bind_text(stmt, 1, newCondition.UTF8String, -1, NULL);

        

        // 4.執行SQL語句,從結果集中取出數據

        while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查詢到一行數據

            // 獲得這行對應的數據

            

            IWStudent *student = [[IWStudent alloc] init];

            

            // 獲得第0列的id

            student.ID = sqlite3_column_int(stmt, 0);

            

            // 獲得第1列的name

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

            student.name = [NSString stringWithUTF8String:(const char *)sname];

            

            // 獲得第2列的age

            student.age = sqlite3_column_int(stmt, 2);

            

            // 添加到數組

            [students addObject:student];

        }

    } else {

        NSLog(@"查詢語句非合法");

    }

    

    return students;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM