1、SQL语句的预编译:将语句转为数据流,执行语句前检查语句的语法,但不能知道语句是否能查出结果。此方法有返回值
预编译成功则返回SQLITE_OK----0否则返回SQLITE_ERROR----1
int sqlite3_prepare_v2(
sqlite3 *db, //指向数据库的指针
const char *zSql, //SQL语句
int nByte, //SQL语句的长度 (一般用-1,系统可以自动算出字符串得长度)
sqlite3_stmt **ppStmt, //指向语句的指针
const char **pzTail //SQL中没有用到的一部分,一般为空
);
2、SQL语句的值绑定
*此类方法均有返回值 预编译成功则返回SQLITE_OK----0否则返回SQLITE_ERROR----1
//对整数值的绑定
int sqlite3_bind_int(
sqlite3_stmt*, //指向语句的指针
int, //占位符的序号(从1开始以此类推)
int //绑定的值
);
//对字符串值的绑定
int sqlite3_bind_text(
sqlite3_stmt*, //指向语句的指针
int, //占位符的序号(从1开始以此类推)
const char*, //要绑定的值(这里要c类型的字符串(CString),一般我们使用的是oc的字符串(NSString*)要通过- (__strong const char *)UTF8String转一下就可以了)
int n, //该字符串的长度(一般用-1,系统可以自动算出字符串得长度)
void(*)(void*) //回调函数(这里博主还没用过所以不是很了解以后会慢慢更新)
);
//对二进制数据值的绑定 一般用于图片的存取
int sqlite3_bind_blob(
sqlite3_stmt*, //指向语句的指针
int, //占位符的序号(从1开始以此类推)
const void*, //要绑定的值(这里要的是c类型的比特(Byte),一般我们使用的是oc的NSDATA(NsData*)要通过- (const void *)bytes转一下就可以了)
int n, //数据的长度(用- (NSUInteger)length得到 这里为什么不用-1呢?因为-1对于算字符串长度在行,其他的不一定准所以这里我们手动算出数据的长度)
void(*)(void*) //回调函数(这里博主还没用过所以不是很了解以后会慢慢更新)
);
3、SQL语句的取值(从数据库中对每一列取值)
//对整数字段的取值
int sqlite3_column_int(
sqlite3_stmt*, //指向语句的指针
int iCol //数据库中表中列的序号(从0开始以此类推)
);
//对字符串字段的取值
*注意这里我们取得是无符号的c字符串我们要先转为有符号C字符串再转为OC字符串
例sname为oc字符串
NSString *sname=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
const unsigned char *sqlite3_column_text(
sqlite3_stmt*, //指向语句的指针
int iCol //数据库中表中列的序号(从0开始以此类推)
);
//对二进制字段的取值
*注意这里我们取得是c二进制我们要转为oc二进制(我们要将byte(c)转为nsdata(oc)通过+ (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length;因为这里需要数据的长度所以需要调用int sqlite3_column_bytes(sqlite3_stmt*, int iCol);获取数据的长度)
例
int length=sqlite3_column_bytes(stmt,3);//获取二进制数据的长度
NSData *img=[NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:length]; //将二进制数据转换位NSData对象
const void *sqlite3_column_blob(
sqlite3_stmt*, //指向语句的指针
int iCol //数据库中表中列的序号(从0开始以此类推)
);