1,導入libsqlite3.0.dylib庫
文件中:#import"sqlite3.h"
2,創(chuàng)建數(shù)據(jù)庫
#define kDocDir [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
#define dbPath [kDocDir stringByAppendingPathComponent:@"test.db"]
sqlite3 *db;
if (sqlite3_open([dbPath UTF8String], &db) !=SQLITE_OK) {
sqlite3_close(db);
NSAssert(0,@"數(shù)據(jù)庫打開失敗。");
return;
}
3,創(chuàng)建表table1, 3個不同類型的字段id是整形,name是字符串,image是2進制
char *sqlStr ="CREATE TABLE table1 (id integer, name text, image blob)";
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(db, sqlStr, -1, &statement,nil) !=SQLITE_OK) {
NSLog(@"Error: failed to prepare statement:create table1");
return;
}
int success = sqlite3_step(statement);
sqlite3_finalize(statement);
if ( success != SQLITE_DONE) {
NSLog(@"Error: failed to dehydrate:CREATE TABLEtable1");
return;
}
4,插入數(shù)據(jù),注意問號的個數(shù)要和參數(shù)匹配
int idvalue;
NSString *namevalue";
NSData *image;
sqlStr = "INSERT INTO table1 VALUES(?,?,?)";
int success = sqlite3_prepare_v2(db, sqlStr, -1, &statement,NULL);
if (success != SQLITE_OK) {
NSLog(@"Error: failed to insert into table1");
}
sqlite3_bind_int(statement, 1, [idvalue integerValue]);//第2個參數(shù)從1開始,與后面查詢數(shù)據(jù)的時候有區(qū)分
sqlite3_bind_text(statement, 2, [namevalue UTF8String], -1,SQLITE_TRANSIENT);
sqlite3_bind_blob(statement, 3, [image bytes], (int)[image length],SQLITE_TRANSIENT);
success = sqlite3_step(statement);
sqlite3_finalize(statement);
if (success == SQLITE_ERROR) {
NSLog(@"Error: failed to insert into the database with message.");
return;
}
sqlStr = "SELECT * FROM table1";
if (sqlite3_prepare_v2(db, sqlStr, -1, &statement,NULL) !=SQLITE_OK) {
NSLog(@"Error: failed to prepare statement with message:gettable1.");
return;
}
//查詢結(jié)果集中1條1條的遍歷所有的記錄,這里的數(shù)字對應的是列值。
while (sqlite3_step(statement) ==SQLITE_ROW) {
int tempint=sqlite3_column_int(statement, 0);//這里要從0開始,注意與插入的時候序號的區(qū)分
char *temp=(char *)sqlite3_column_text(statement, 1);
NSString *tempstr=temp?[NSString stringWithUTF8String:temp]:@"";
int length=sqlite3_column_bytes(statement,2);//獲得到2進制的數(shù)據(jù)的長度
Byte* bytes=(Byte*)sqlite3_column_blob(statement,2);
NSData *data=[NSData dataWithBytes:byteslength:length];
}
6,關閉數(shù)據(jù)庫
sqlite3_close(db);