1. 程式人生 > >sqlite各函式詳解

sqlite各函式詳解

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 語句。