標籤:
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開始以此類推)
);
sqlite常用文法詳細介紹