sqlite數據庫相關總結

1.sql

sqlite是輕量型、關係型管理系統,是嵌入式的,佔用資源低、可移植性強,比mySql處理速度快,如今主流的版本是sqlite3數據庫

2.函數

sqlite中的數據類型有TEXT(字符串,採用UTF-8,UTF-16編碼)、(REAL)浮點型、(INTEGER)有符號的整型、(BLOB)大二進制數據,能存聽任何二進制數據、還有其餘幾個不經常使用的( (VARCHAR、CHAR、CLOB)會轉化成TEXT的類型    (FLOAT DOUBLE)轉化成REAL類型   (NUMERIC)轉化成INTEGER)編碼

注:sqlite中沒有布爾型,能夠用integer的0和1代替,也沒有時間和日期的類型,能夠用TEXT,REAL等代替spa

3.指針

經常使用的基本的sql語句有:sqlite

------建立表:對象

           creat table 表名 (字段1,字段2,字段3.......);索引

-------若是表不存在,再建立資源

           creat table  if not exists 表名 (字段1,字段2,字段3.......) 

--------刪除整張表:

        drop table 表名

--------插入數據:

        insert into 表名 (字段1,字段2,字段3.......)values (值1,值2,值3......)

---------查詢:

        select 字段名 from 表名  ---------》查詢某一字段的數據

        select * from 表名  ---------》查詢全部字段的全部數據

----------修改:

        update 表名 set 字段名 = '新值' where 查詢條件

 

4.寫代碼以前須要在link frameWorks and libraries 裏面添加sqlite3的動態庫,在數據庫相關操做的類中添加頭文件,就能夠了。

通常數據庫咱們要在沙盒的document文件夾下建立一個文件,來做爲數據庫的保存路徑。

5.建立sqlite3 * db 這樣一個數據庫的對象。sqlite是c語言的類庫,函數都爲c語言的函數

   打開數據庫的方法:

   sqlite3_open([filePath UTF8String], &DB);  -------------》第一個參數爲數據庫的存儲路徑,第二個參數爲數    據庫取地址,是有返回值的,若返回值爲SQLITE_OK即打開成功。

   若是數據庫打開成功,就能夠建立表了,先寫sql語句,再用執行函數進行執行:

   例如: 

    NSString * creatSql = @"CREATE TABLE IF NOT EXISTS StudentNum (idNum TEXT PRIMARY KEY,name TEXT);";

        char * err;

        /**

         第一個參數  DB對象

         第二個參數  sql語句

         第三個和第四個參數 回調函數和回調函數傳遞的參數

         第五個參數  是一個錯誤信息

         */

        if (sqlite3_exec(DB, [creatSql UTF8String], NULL, NULL, &err) != SQLITE_OK) {

            //失敗

        }else{

            //建立表成功

        }

      在打開數據庫、建立表失敗等的狀況下 也須要關閉數據庫,也能夠拋出錯誤信息:

            sqlite3_close(DB);

            NSAssert(NO, @"建立表失敗");

     最後數據庫操做完畢以後也要關閉數據庫

 6.查詢數據:

在數據庫打開成功的狀況下就能夠進行查詢了。

這條sql語句中的?是佔位符。

   

    NSString * sql = @"SELECT idNum,name FROM StudentNum where idNum = ?";

    sqlite3_stmt * statement;//語句對象

    //預處理函數

    /*

     第一個參數:數據庫對象

     第二個參數:sql語句

     第三個參數:執行語句的長度-1指所有長度

     第四個參數:語句對象

     第五個參數:沒有執行的語句部分

     */

    if (sqlite3_prepare_v2(DB, [sql UTF8String], -1, &statement, NULL) == SQLITE_OK) {

        NSString * idNum = model.idNum;

        //綁定函數,綁定佔位符要代替的內容

        /*

         第一個參數:語句對象

         第二個參數:數據開始執行的序號

         第三個參數:咱們要綁定的值

         第四個參數:綁定的字符串的長度

         第五個參數:指針  NULL

         */

        sqlite3_bind_text(statement, 1, [idNum UTF8String], -1, NULL);

        //遍歷去查詢結果 返回值爲SQLITE_ROW時表明查詢出結果了,可是不能保證全部的數據都遍歷了

        if (sqlite3_step(statement) == SQLITE_ROW) {

            //提取數據

            /*

             第一個參數:語句對象

             第二個參數:字段的索引

             */

            char * idNum = (char *)sqlite3_column_text(statement, 0)

            ;

            NSString * idNumStr = [[NSString alloc]initWithUTF8String:idNum];

            char * name = (char *)sqlite3_column_text(statement, 1);

            NSString * nameStr = [[NSString alloc]initWithUTF8String:name];

            studentModel * selectModel = [[studentModel alloc]init];

            selectModel.idNum = idNumStr;

            selectModel.name = nameStr;

            //查詢到數據以後釋放語句對象,並關閉數據庫

            sqlite3_finalize(statement);

            sqlite3_close(DB);

            

        }

    }

相同,當打開數據庫失敗的時候也是要關閉數據庫,拋出異常語句

增刪改的順序和上面查詢的代碼順序是同樣的,先打開數據庫,而後進行預處理,而後綁定,而後遍歷數據,而後提取數據,而後釋放對象、關閉數據庫。

相關文章
相關標籤/搜索