首页 > 代码库 > IOS学习笔记-- SQLite的应用

IOS学习笔记-- SQLite的应用

  1 //  2 //  HMViewController.m  3 //  02-SQLite的应用  4 //  5 //  Created by apple on 14-7-24.  6 //  Copyright (c) 2014年 heima. All rights reserved.  7 //  8   9 #import "HMViewController.h" 10 #import <sqlite3.h> 11  12 @interface HMViewController () 13 - (IBAction)insert; 14 - (IBAction)update; 15 - (IBAction)delete; 16 - (IBAction)select; 17 // db就是数据库的象征,如果要进行CRUD,得操作db这个实例 18 @property (nonatomic, assign) sqlite3 *db; 19 @end 20  21 @implementation HMViewController 22  23 - (void)viewDidLoad 24 { 25     [super viewDidLoad]; 26      27     // 获得数据库文件的路径 28     NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 29     NSString *filename = [doc stringByAppendingPathComponent:@"students.sqlite"]; 30     // 将OC字符串 转成 C语言字符串 31     const char *cfilename = filename.UTF8String; 32     // 1.打开数据库(如果数据库文件不存在,sqlite3_open函数会自动创建数据库文件) 33     int result = sqlite3_open(cfilename, &_db); 34     if (result == SQLITE_OK) { // 打开成功 35         NSLog(@"成功打开数据库"); 36          37         // 2.创表 38         const char *sql = "CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"; 39         char *erroMsg = NULL; 40         result = sqlite3_exec(self.db, sql, NULL, NULL, &erroMsg); 41         if (result == SQLITE_OK) { 42             NSLog(@"成功创表"); 43         } else { 44             //            printf("创表失败--%s--%s-%d", erroMsg, __FILE__, __LINE__); 45             NSLog(@"创表失败--%s--%@-%d", erroMsg, [NSString stringWithUTF8String:__FILE__], __LINE__); 46         } 47     } else { 48         NSLog(@"打开数据库失败"); 49     } 50 } 51  52 - (IBAction)insert { 53     for (int i = 0; i<20; i++) { 54         // 1.拼接SQL语句 55         NSString *name = [NSString stringWithFormat:@"Jack-%d", arc4random_uniform(100)]; 56         int age = arc4random_uniform(20) + 30; 57         NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name, age) VALUES (‘%@‘, %d);", name, age]; 58          59         // 2.执行SQL语句 60         char *erroMsg = NULL; 61         sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &erroMsg); 62         if (erroMsg) { 63             NSLog(@"插入数据失败--%s", erroMsg); 64         } else { 65             NSLog(@"成功插入数据"); 66         } 67     } 68 } 69  70 - (IBAction)update { 71     //与insert只有sql语句不同 72 } 73  74 - (IBAction)delete { 75     //与insert只有sql语句不同 76 } 77  78 - (IBAction)select { 79     const char *sql = "SELECT id, name, age FROM t_student WHERE age <= 30;"; 80     // 进行查询前的准备工作 81     // -1 代表系统会自动计算SQL语句的长度 82     // sqlite3_stmt:用来取数据 83     sqlite3_stmt *stmt = NULL; 84     if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL) == SQLITE_OK) { // SQL语句没有问题 85         NSLog(@"查询语句没有问题"); 86          87         // 每调一次sqlite3_step函数,stmt就会指向下一条记录 88         while (sqlite3_step(stmt) == SQLITE_ROW) { // 找到一条记录 89             // 取出数据 90              91             // 取出第0列字段的值(int类型的值) 92             int ID = sqlite3_column_int(stmt, 0); 93              94             // 取出第1列字段的值(tex类型的值) 95             const unsigned char *name = sqlite3_column_text(stmt, 1); 96              97             // 取出第2列字段的值(int类型的值) 98             int age = sqlite3_column_int(stmt, 2); 99             100             NSLog(@"%d %s %d", ID, name, age);101         }102     } else {103         NSLog(@"查询语句有问题");104     }105 }106 @end