SQLite源碼編譯使用

來源:互聯網
上載者:User

因為項目需要用到資料庫,而且不能依賴具體平台同時還要具有靈活性,所以就想到了SQLite,然後拿到源碼後開始修改使用,這裡為了備忘就簡單記錄一下,下面就是簡單的使用例子,同時也希望能夠幫到一些剛剛接觸SQLite的同學。

  1. static char*create_settinginfo_table_cmd="create table setting_data(Option,DefaultValue,UsingValue)";  
  2. static char*select_record_by_key="select * from setting_data WHERE %s='%s'";  
  3. static char*insert_record_table_cmd="insert into setting_data values('%s','%s','%s')";  
  4. static char*modify_record_by_key="update setting_data SET %s='%s' WHERE %s='%s'";  
  5. static char*null_string="null";  

 

  1. static int search_callback_exec0(void*exists,int argc, char ** argv, char ** aszColName)  
  2. {  
  3.     if(exists) {  
  4.         *((int*)exists)=1;  
  5.     }  
  6.     return 0;  
  7. }  
  8.   
  9. static int search_callback_exec(void*exists,int argc, char ** argv, char ** aszColName)  
  10. {  
  11.     if(exists) {  
  12.         *((int*)exists)=1;  
  13.         strcpy(SETTING_MANAGER.value_buffer,argv[2]);  
  14.     }  
  15.     return 0;  
  16. }  
  17.   
  18. static enum SETTING_INFO_STATUS get_option_name_value(char*option_name,char**value)  
  19. {  
  20.     int exists=0,ret;  
  21.     char*err_msg=NULL;  
  22.   
  23.     sprintf(SETTING_MANAGER.cmd_buffer,select_record_by_key,"Option",option_name);  
  24.     ret=sqlite3_exec(SETTING_MANAGER.db,SETTING_MANAGER.cmd_buffer,search_callback_exec,(void*)&exists,&err_msg);  
  25.     if(ret!=SQLITE_OK) {  
  26.         printk("Error:%s\n",err_msg);  
  27.         sqlite3_free(err_msg);  
  28.         return SETTING_INFO_STATUS_NOT_EXIST;  
  29.     }  
  30.     if(exists==0) {  
  31.         return SETTING_INFO_STATUS_NOT_EXIST;  
  32.     }  
  33.     *value=SETTING_MANAGER.value_buffer;  
  34.     return SETTING_INFO_STATUS_SUCCESS;  
  35. }  

簡答的說一下,首先定義增刪改查的字串,然後根據需要格式化,最終產生執行命令字串,最後再調用執行SQL語句的函數,這裡需要傳遞幾個參數,以尋找為例,裡面有一個尋找到結果後回調的函數,如果尋找到結果就回調傳遞進去的函數,這裡需要特別說明一下,每尋找到一條記錄就會回調一次指定的函數,並把結果傳遞過去,結果回呼函數的參數這裡簡單說明一下,第一個參數是調用SQL語句執行函數時指定的給結果回呼函數的一個使用者自訂參數,第二個是一條記錄的欄位數,對應argv和aszColName,比如argv[0]就是目前記錄(可以理解為一行)的第一個欄位值,aszColName[0]就是目前記錄的欄位名,其他的都比較好理解,就不羅嗦了,備忘到此結束。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.