首页 > 代码库 > SQLite的应用

SQLite的应用

1》打开数据库并创表:

 // 获得数据库文件的路径    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    NSString *filename = [doc stringByAppendingPathComponent:@"students.sqlite"];    // 将OC字符串 转成 C语言字符串    const char *cfilename = filename.UTF8String;    // 1.打开数据库(如果数据库文件不存在,sqlite3_open函数会自动创建数据库文件)    int result = sqlite3_open(cfilename, &_db);    if (result == SQLITE_OK) { // 打开成功        NSLog(@"成功打开数据库");                // 2.创表        const char *sql = "CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);";        char *erroMsg = NULL;        result = sqlite3_exec(self.db, sql, NULL, NULL, &erroMsg);        if (result == SQLITE_OK) {            NSLog(@"成功创表");        } else {//            printf("创表失败--%s--%s-%d", erroMsg, __FILE__, __LINE__);            NSLog(@"创表失败--%s--%@-%d", erroMsg, [NSString stringWithUTF8String:__FILE__], __LINE__);        }    } else {        NSLog(@"打开数据库失败");    }

2》操作数据库

<1>插入数据:

for (int i = 0; i<20; i++) {        // 1.拼接SQL语句        NSString *name = [NSString stringWithFormat:@"Jack-%d", arc4random_uniform(100)];        int age = arc4random_uniform(20) + 30;        NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name, age) VALUES (‘%@‘, %d);", name, age];                // 2.执行SQL语句        char *erroMsg = NULL;        sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &erroMsg);        if (erroMsg) {            NSLog(@"插入数据失败--%s", erroMsg);        } else {            NSLog(@"成功插入数据");        }    }

<2>查询数据

 const char *sql = "SELECT id, name, age FROM t_student WHERE age <= 30;";    // 进行查询前的准备工作    // -1 代表系统会自动计算SQL语句的长度    // sqlite3_stmt:用来取数据    sqlite3_stmt *stmt = NULL;    if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL) == SQLITE_OK) { // SQL语句没有问题        NSLog(@"查询语句没有问题");                // 每调一次sqlite3_step函数,stmt就会指向下一条记录        while (sqlite3_step(stmt) == SQLITE_ROW) { // 找到一条记录            // 取出数据                        // 取出第0列字段的值(int类型的值)            int ID = sqlite3_column_int(stmt, 0);                        // 取出第1列字段的值(tex类型的值)            const unsigned char *name = sqlite3_column_text(stmt, 1);                        // 取出第2列字段的值(int类型的值)            int age = sqlite3_column_int(stmt, 2);                        NSLog(@"%d %s %d", ID, name, age);        }    } else {        NSLog(@"查询语句有问题");    }