sqlite各函式詳解
阿新 • • 發佈:2019-02-05
1.sqlite3_open([database_path UTF8String], &db)
database_path是要開啟資料庫檔案的路徑,是oc語言,要轉化為c字串。
&db存放資料庫連線的控制代碼。
2.sqlite3_prepare_v2
NSString *sqlQuery = [NSString stringWithFormat: @"SELECT * FROM %@",TABLENAME]; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { // db開啟的資料庫控制代碼;[sqlQuery UTF8String]要執行的sql語句;-1引數sql的位元組數,為負則sql語句從開始到結束;&statement:sqlite3_step執行的變異好的準備語句的指標,有錯位null;nil:指向sql語句中為執行的部分。 while (sqlite3_step(statement) == SQLITE_ROW) { //sqlite3_step用於執行sqlite_prepare的準備語句。這個語句執行到結果的第一行。如果繼續執行到第二行,需再次呼叫這個語句。[如沒有返回值的語句insert、update、delete,只執行一次] //SQLITE_ROW查詢時產生的結果,可以使用資料訪問函式獲得資料,執行sqlite3_step獲取下一行資料。 char *name = (char*)sqlite3_column_text(statement, 1); //sqlite3_column是字首,用於獲得sqlite3_step結果集中的列;第一個引數為sqlite_prepare返回的prepared statement物件的指標,第二個引數是返回的列的索引,最左列為0,行的列數用sqlite3_clumn_count()獲得。 NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name]; int age = sqlite3_column_int(statement, 2); char *address = (char*)sqlite3_column_text(statement, 3); NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address]; NSLog(@"name:%@ age:%d address:%@",nsNameStr,age, nsAddressStr); } }else{ NSLog(@"select error:%@",sqlQuery); }
3.sqlite_finalize銷燬被sqlite_prepare建立的準備語句。
4.sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err)
db描述的是資料庫控制代碼;[sql UTF8String]要執行的SQL語句;第三個引數為回撥函式;第四void *回撥函式的第一個引數;err&錯誤資訊,如果沒有SQL問題則值為NULL
sqlite3_exec包裹了先前的sqlite3_prepare(),sqlite3_step,sqlite_finalize,可用簡單的程式碼執行多條sql 語句。