ios sqlite数据库操作

  1 @interface MyViewController () {
  2     // 数据库实例,代表着整个数据库
  3     sqlite3 *_db;
  4 }
  5 @end
  6 
  7 @implementation MyViewController
  8 
  9 - (void)viewDidLoad
 10 {
 11     [super viewDidLoad];
 12     
 13     [self openDB];
 14     
 15     [self createTables];
 16     
 17     for (int i = 0; i<10; i++) {
 18         //[self insertData];
 19     }
 20     
 21     
 22     [self findData];
 23     
 24     // 关闭数据库
 25     sqlite3_close(_db);
 26 }
 27 
 28 #pragma mark 查询数据
 29 - (void)findData {
 30     char *sql = "select id,name,age from t_person;";
 31     
 32     sqlite3_stmt *stmt;
 33     
 34     // sqlite3_prepare_v2做一些插入数据的准备
 35     // 主要是检查SQL语句的语法问题
 36     int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);
 37     // 说明语句没有语法问题
 38     if (result == SQLITE_OK) {
 39         
 40         // 如果返回值是ROW,代表读取到一行数据
 41         while (sqlite3_step(stmt) == SQLITE_ROW) {
 42             // 列号从0开始
 43             int ID = sqlite3_column_int(stmt, 0);
 44             
 45             char *name = (char *)sqlite3_column_text(stmt, 1);
 46             
 47             int age = sqlite3_column_int(stmt, 2);
 48             
 49             NSLog(@"id=%i,name=%s,age=%i", ID, name, age);
 50         }
 51         
 52     } else {
 53         NSLog(@"查询数据的SQL语句语法有问题");
 54     }
 55 }
 56 
 57 #pragma mark 插入数据
 58 - (void)insertData {
 59     char *sql = "insert into t_person(name, age) values(?, ?);";
 60     
 61     sqlite3_stmt *stmt;
 62 
 63     // sqlite3_prepare_v2做一些插入数据的准备
 64     // 主要是检查SQL语句的语法问题
 65     int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);
 66     
 67     // 说明语句没有语法问题
 68     if (result == SQLITE_OK) {
 69         // 第2个int类型的参数用来指定第几列,从1开始
 70         // 绑定name字段的值
 71         sqlite3_bind_text(stmt, 1, "mj", -1, NULL);
 72         
 73         // 绑定age字段的值
 74         sqlite3_bind_int(stmt, 2, 10);
 75         
 76         // 执行sql语句
 77         if (sqlite3_step(stmt) != SQLITE_DONE) {
 78             NSLog(@"插入数据失败!");
 79         } else {
 80             NSLog(@"插入数据成功!");
 81         }
 82     } else {
 83         NSLog(@"插入数据的SQL语句语法有问题");
 84     }
 85 }
 86 
 87 #pragma mark 打开数据库
 88 - (void)openDB {
 89     // 数据库文件路径
 90     NSString *filename = [@"sqlite.db" documentsAppend];
 91     
 92     // 如果数据库不存在,就会创建一个
 93     int result = sqlite3_open([filename UTF8String], &_db);
 94     if (result == SQLITE_OK) {
 95         NSLog(@"打开数据库成功!");
 96     }
 97 }
 98 
 99 #pragma mark 创建表
100 - (void)createTables {
101     char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";
102     
103     char *error;
104     // sqlite3_exec能执行一切SQL语句
105     // insert into t_person(name, age) values('mj', 10);
106     int result = sqlite3_exec(_db, sql, NULL, NULL, &error);
107     
108     if (result != SQLITE_OK) {
109         NSLog(@"创表错误:%s", error);
110     }
111 }
112 @end

 

 
posted @ 2013-08-18 16:05  wangzhenxiang  阅读(231)  评论(0编辑  收藏  举报