您的位置:首页 > 编程语言 > C语言/C++

iOS数据库操作(基于C语言API)

2016-07-20 20:56 465 查看

表创建

sqlite3 *db;
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES).firstObject;
const char *cpath = [path UTF8String];
if (sqlite3_open( cpath,&db) != SQLITE_OK){
sqlite3_close(db);
NSAssert(NO, @"数据库打开失败");
}else{

char *err ;
if (sqlite3_exec(
db,
[@"CREATE TABLE IF NOT EXISTS t_test(name TEXT PRIMARY KEY, sex TEXT NOT NULL);" UTF8String],
NULL,
NULL,
&err) != SQLITE_OK){
sqlite3_close(db);
printf("%s",err);
NSAssert(NO, @"表创建失败");
}

NSLog(@"表创建成功");
sqlite3_close(db);

}


查询数据

操作步骤:

- 1 使用sqlite3_open 函数打开数据库

- 2 使用sqlite3_prepare_v2函数预处理SQL语句

- 3 使用sqlite3_bind_text函数绑定参数

- 4 使用sqlite3_step函数执行SQL语句,便利结果集

- 5 使用sqlite3_column_text等函数提取字段数据

- 6 使用sqlite3_finalize和sqlite3_close函数释放资源

if (sqlite3_open(cpath, &db) != SQLITE_OK){
sqlite3_close(db);
NSAssert(NO, @"数据库打开失败");
}else{
NSString *sql = @"SELECT name, sex FROM t_test where name = XXX ";
//ORDER BY name DESC降序
//ORDER BY name ASC 升序排列
const char *csql = [sql UTF8String];

sqlite3_stmt *statement;

//预处理
if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK){//将SQL语句编译为二进制代码,提高SQL语句的额执行速度,第三个参数代表全部SQL字符串的长度,第四个参数是sqlite3_stmt指针的地址,第五个参数是SQlite语句没有执行的部分语句

const char *cname = [@"jason" UTF8String];

sqlite3_bind_text(statement, 1, cname, -1, NULL);//用于绑定SQL语句的参数,第二个参数为序号(从1开始),第三个参数为字符串值,第四个参数为字符串长度,第五个参数为一个函数指针<如果SQL语句中带有问号(即占位符),那么就要绑定参数>

if (sqlite3_step(statement) == SQLITE_ROW){//返回值为SQLITE_ROW说明还有没有遍历的行
char *cname = (char *)sqlite3_column_text(statement, 0);//提取字段数据,高函数用来读取字符串类型的字段,第二个参数用于指定select字段的索引(从0开始)
/* 类似的函数
sqlite3_column_blob()
sqlite3_column_doubleb()
sqlite3_column_int()
sqlite3_column_int64()
sqlite3_column_text()
sqlite3_column_text16()
*/
char *csex = (char *)sqlite3_column_text(statement, 1);

NSString *name = [[NSString alloc] initWithUTF8String:cname];
NSString *sex = [[NSString alloc] initWithUTF8String:csex];
NSLog(@"===%@,sex == %@",name, sex);
}
}
sqlite3_finalize(statement);//释放资源
sqlite3_close(db);
}


修改数据

操作步骤

- 1使用sqlite3)_open代开数据库

- 2 使用sqlite3_prepare_v2函数预处理SQL语句

- 3 使用sqlite3_bind_text函数绑定参数

- 4 使用sqlite3_step函数执行SQL语句

- 5 使用sqlite3_finalize和sqlite3_close韩式释放资源(与查询相比,少了提取字段的过程)

//修改数据
if (sqlite3_open(cpath, &db) != SQLITE_OK){
sqlite3_close(db);
NSAssert(NO, @"数据库打开失败");
}else{
NSString *sql = @"INSERT OR REPLACE INTO t_test(name, sex) VALUES(?,?)";
//"UPDATE t_test set name = ? WHERE name = ?"
const char *csql = [sql UTF8String];

sqlite3_stmt *statement;
if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK ){
const char *name = [@"jason" UTF8String];
const char *sex = [@"girl" UTF8String];

sqlite3_bind_text(statement, 1, name, -1, NULL);
sqlite3_bind_text(statement, 2, sex, -1, NULL);

if (sqlite3_step(statement) != SQLITE_DONE){//代表执行完成
NSAssert(NO, @"插入数据失败");
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
}


删除数据 和修改数据类似,只是SQL语句不同

//修改数据
if (sqlite3_open(cpath, &db) != SQLITE_OK){
sqlite3_close(db);
NSAssert(NO, @"数据库打开失败");
}else{
NSString *sql = @"DELETE FROM t_test WHERE NAME = ?";
const char *csql = [sql UTF8String];

sqlite3_stmt *statement;
if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK ){
const char *name = [@"jason" UTF8String];
const char *sex = [@"girl" UTF8String];

sqlite3_bind_text(statement, 1, name, -1, NULL);
sqlite3_bind_text(statement, 2, sex, -1, NULL);

if (sqlite3_step(statement) != SQLITE_DONE){//代表执行完成
NSAssert(NO, @"删除数据失败");
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
}


demo地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息