1、什麼是SQLitesql
#import <Foundation/Foundation.h> #import "Student.h" @interface DataBaseHandle : NSObject + (DataBaseHandle *)shareDataBase; - (void)openDB; - (void)closeDB; //添加數據 - (void)insertNewStudent:(Student *)student; /** * 根據學號查詢學生 */ - (Student *)selectStudentWithNumber:(NSInteger)number; /** * 查詢表中全部數據 */ - (NSMutableArray *)selectAllStudents; /** * 根據學號刪除 */ - (void)deleteStudentWithNumber:(NSInteger)number; - (void)updateStudent:(NSString *)gender WithNumber:(NSInteger)number; @end
DataBaseHandle.m數據庫
+ (DataBaseHandle *)shareDataBase { @synchronized (self){ if (handle == nil) { handle = [[DataBaseHandle alloc] init]; // [handle closeDB]; } } return handle; } sqlite3 *db = nil;
打開數據庫指針
- (void)openDB { NSString *str = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject]; NSString *path = [str stringByAppendingPathComponent:@"student.sqlite"]; NSLog(@"%@",path); //打開數據庫 //UTF8String 將oc字符串轉化爲C語言字符串 //方法執行完會返回一個數據庫對象,這個對象已被初始化 int result = sqlite3_open([path UTF8String], &db); //若是等於SQLITE_OK說明sql語句執行成功 if (result == SQLITE_OK) { NSLog(@"數據庫打開成功"); //建立表格 NSString *sqlString = @"create table if not exists Student (number integer primary key autoincrement,name text,gender text,age integer)"; int result = sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"見表成功"); } } else { NSLog(@"數據庫打開失敗"); } }
關閉數據庫sqlite
- (void)closeDB { int result = sqlite3_close(db); if (result == SQLITE_OK) { NSLog(@"關閉成功"); }else { NSLog(@"關閉失敗"); } }
插入數據對象
- (void)insertNewStudent:(Student *)student { [self openDB]; //準備sql語句 NSString *sqlString = @"insert into Student (name,gender, age) values (?, ?, ?)"; /*第一個參數,數據庫指針, 第二個參數,sql語句 第三個參數,sql語句的長度,寫成-1,自動計算 第四個參數,建立管理sql語句的類,statement 第五個參數,預留參數 */ sqlite3_stmt *stmt = nil; int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); if (result == SQLITE_OK) { NSLog(@"添加語句成功"); //綁定參數 //綁定的參數:1.管理類指針,2.第幾個問號,3.綁定的數據, 4.綁定數據的長度 -1 5. sqlite3_bind_text(stmt, 1, [student.name UTF8String], -1, NULL); sqlite3_bind_text(stmt, 2, [student.gender UTF8String], -1, NULL); sqlite3_bind_int(stmt, 3, (int)student.age); /**/ sqlite3_step(stmt); } else { NSLog(@"添加語句失敗"); } sqlite3_finalize(stmt); [self closeDB]; }
查詢數據blog
- (NSMutableArray *)selectAllStudents { [self openDB]; NSString *sqlString = @"select * from student"; sqlite3_stmt *stmt = nil; int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, nil); if (result == SQLITE_OK) { NSLog(@"查詢所有成功"); //循環的條件:下一行還有數據,這時就能一直循環下去 NSMutableArray *array = [NSMutableArray arrayWithCapacity:0]; while (sqlite3_step(stmt) == SQLITE_ROW) { NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)]; NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)]; NSInteger age = sqlite3_column_int(stmt, 3); Student *stu = [[Student alloc] init]; stu.name = name; stu.age = age; stu.gender = gender; [array addObject:stu]; [stu release]; } sqlite3_finalize(stmt); [self closeDB]; return array; } else { NSLog(@"error"); return nil; } }
- (Student *)selectStudentWithNumber:(NSInteger)number { [self openDB]; NSString *sqlString = @"select * from Student where number = ?"; sqlite3_stmt *stmt = nil; int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); if (result == SQLITE_OK) { NSLog(@"查詢成功"); //綁定參數 sqlite3_bind_int(stmt, 1, (int)number); Student *student = [[[Student alloc] init]autorelease]; while (sqlite3_step(stmt) == SQLITE_ROW) { student.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)]; student.gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)]; student.age = sqlite3_column_int(stmt, 3); } sqlite3_finalize(stmt); [self closeDB]; return student; } else { NSLog(@"不OK"); return nil; } }
刪除數據內存
- (void)deleteStudentWithNumber:(NSInteger)number { [self openDB]; NSString *sqlString = @"delete from Student where number = ?"; sqlite3_stmt *stmt = nil; int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); if (result == SQLITE_OK) { sqlite3_bind_int(stmt, 1, (int)number); //執行sql語句 sqlite3_step(stmt); } //釋放stmt的內存資源 sqlite3_finalize(stmt); [self closeDB]; }
修改數據ci
- (void)updateStudent:(NSString *)gender WithNumber:(NSInteger)number { [self openDB]; NSString *sqlString = @"update Student set gender = ? where number = ?"; sqlite3_stmt *stmt = nil; int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); if (result == SQLITE_OK) { sqlite3_bind_int(stmt, 2, (int)number); sqlite3_step(stmt); } sqlite3_finalize(stmt); [self closeDB]; }