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

c/c++接口嵌入式sqlite使用小结

2013-09-29 21:41 781 查看
本文以Mac OS下Xcode IDE为背景...

可以先看看我对An Introduction To The SQLite C/C++
Interface的翻译,对SQLite有个基本的了解

http://blog.csdn.net/u010761652/article/details/12177249

准备工作:

首先需要在项目的Bulid Phases下导入sqlite动态链接库:libsqlite3.dylib, 然后#import <sqlite3.h>头文件

几个基本语句:

1. 创建和打开数据库:  

sqlite3 *database;
int result = sqlite3_open("/Users/lin/Desktop/sqlite/data.sqlite", &database);


注意,如果目录没有这个文件的话,就会创建一个
其中第一个参数必须是可移植的C字符串,也就是UTF8

2.关闭数据库:

sqlite3_close(database);


3.创建表:

char *errorMsg;
NSString *createSQL = @"CREATE TABLE TEST (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIELD_DATA TEXT)"; //声明一条SQL语句
int result = sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg);  // 执行成功的话sqlite3_exec返回常量SQLITE_OK


4.检索表:

NSString *query = @"SELECT ID, FIELD_DATA FROM TEST ORDER BY ID";
sqlite3_stmt *statement;
int result = sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil); // 第三个参数用于指定第二个参数的可用长度, -1表示使用全长
if (result){  //如果语句执行成功,则一步一步调试结果集
while (sqlite3_step(statement) == SQLITE_ROW){
int rowNum = sqlite3_column_int(statement, 0); //第一次执行while时获取第一行第一列的值,第二次执行时获取第二行第二列的值.......
char *rowData = (char *)sqlite3_column_text(statement, 1); //同上,获取的是第二列的值
NSLog("%i: %@\n", rowNum, [NSString stringWithCString:rowData encoding:UTF8Char]);
}
}
sqlite3_finalize(statement);// 一定要加上次句,以防止内存溢出


注意一下,其实sqlite3_exec()就是把sqlite3_stmt.. ; sqlite3_prepare_v2()这些语句包装起来的一种方便快捷的方法

5.插入数据:

就像我们在一个printf第一个参数中插入占位符以打印出变量一样, 在INSERT语句中我们通过一种叫绑定变量的方法插入变量,如下所示:

char *sql = "INSERT INTO TEST VALUES (?, ?);";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, sql, -1, &statement, nil) == SQLITE_OK){
sqlite3_bind_int(statement, 1, 235); //把第一个?用235替换,当然也可以用任意的变量替换
sqlite3_bind_text(statement, 2, "Bar", -1, NULL);
}
if (sqlite3_step(statement) != SQLITE_DONE){
// handle  the error
}
sqlite3_finalize(statement);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: