SQLite3数据库
#pragma mark 打开数据库
- (void)openDB {
// 数据库文件路径
NSString *filename = [@"sqlite.db" documentsAppend];
// 如果数据库不存在,就会创建一个
int result = sqlite3_open([filename UTF8String], &_db);
if (result == SQLITE_OK) {
NSLog(@"打开数据库成功!");
}
}
#pragma mark 创建表
- (void)createTables {
char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";
char *error;
// sqlite3_exec能执行一切SQL语句
// insert into t_person(name, age) values('person', 10);
int result = sqlite3_exec(_db, sql, NULL, NULL, &error);
if (result != SQLITE_OK) {
NSLog(@"创表错误:%s", error);
}
}
#pragma mark 插入数据
- (void)insertData {
char *sql = "insert into t_person(name, age) values(?, ?);";
sqlite3_stmt *stmt;
// sqlite3_prepare_v2做一些插入数据的准备
// 主要是检查SQL语句的语法问题
int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);
// 说明语句没有语法问题
if (result == SQLITE_OK) {
// 第2个int类型的参数用来指定第几列,从1开始
// 绑定name字段的值
sqlite3_bind_text(stmt, 1, "person", -1, NULL);
// 绑定age字段的值
sqlite3_bind_int(stmt, 2, 10);
// 执行sql语句
if (sqlite3_step(stmt) != SQLITE_DONE) {
NSLog(@"插入数据失败!");
} else {
NSLog(@"插入数据成功!");
}
} else {
NSLog(@"插入数据的SQL语句语法有问题");
}
}
#pragma mark 查询数据
- (void)findData {
char *sql = "select id,name,age from t_person;";
sqlite3_stmt *stmt;
// sqlite3_prepare_v2做一些插入数据的准备
// 主要是检查SQL语句的语法问题
int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);
// 说明语句没有语法问题
if (result == SQLITE_OK) {
// 如果返回值是ROW,代表读取到一行数据
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 列号从0开始
int ID = sqlite3_column_int(stmt, 0);
char *name = (char *)sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
NSLog(@"id=%i,name=%s,age=%i", ID, name, age);
}
} else {
NSLog(@"查询数据的SQL语句语法有问题");
}
}