97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠(yuǎn)見教育科技集團(tuán) >> iOS資料 >> iOS開發(fā)中的sqlite數(shù)據(jù)庫  
 
iOS開發(fā)中的sqlite數(shù)據(jù)庫
分享到:

1.iOS開發(fā)中的數(shù)據(jù)一般指sqlite,而如果連接服務(wù)器,那就另說,那就不是iOS開發(fā)直接操作其它數(shù)據(jù)庫,譬如SqlSever,Mysql,Orical。要使用數(shù)據(jù)庫sqlite,首先將libsqlite3.0.dylib加到項(xiàng)目中。5.0之后的版本導(dǎo)入數(shù)據(jù)庫頭文件變成了#import "sqlite3.h",之前還有指定路徑user,這也說明蘋果不斷改進(jìn)著。

2.iOS開發(fā)中有個沙箱的概念。什么是沙箱?簡單的理解就是指在iOS開發(fā)中程序能操作的位置只能在指定目錄,意思就是只能在沙箱中進(jìn)行操作。譬如文件的寫入寫出,要傳輸?shù)膱D片,都只能放在那個目錄,當(dāng)然你也可以在其中建立子目錄。數(shù)據(jù)庫的本質(zhì)其實(shí)也是一個文件,所以也只能在目錄中進(jìn)行,那么數(shù)據(jù)庫建立的路徑也只能在這個目錄下。

3.首先是數(shù)據(jù)庫要保存的路徑

NSArray *array=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsPaths=[array objectAtIndex:0];

NSString *databasePaths=[documentsPaths stringByAppendingPathComponent:@"test_DB"];

4.然后建立數(shù)據(jù)庫,新建數(shù)據(jù)庫這個蘋果做的非常好,非常方便

sqlite3 *database;

//新建數(shù)據(jù)庫,存在則打開,不存在則創(chuàng)建

if (sqlite3_open([databasePaths UTF8String], &database)==SQLITE_OK)
    {
        NSLog(@"open success");
        else {
            NSLog(@"open failed");
        }
    }

5.對數(shù)據(jù)庫建表操作:如果在些程序的過程中,發(fā)現(xiàn)表的字段要更改,一定要刪除之前的表,如何做,就是刪除程序或者換個表名,主鍵是自增的

char *errorMsg;
    NSString *sql=@"create table if not exists users(User_id integer primary key,Password text)";
    //創(chuàng)建表
    if (sqlite3_exec(database, [sql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK )
    {
        NSLog(@"create success");
    }else{
        NSLog(@"create error:%s",errorMsg);
        sqlite3_free(errorMsg);
    }

6.插入數(shù)據(jù)

NSString *insertSQLStr = [NSString stringWithFormat:@"insert into users(Password)values ("%@")",str1];
    const char *insertSQL=[insertSQLStr UTF8String];
    //插入數(shù)據(jù)
    if (sqlite3_exec(database, insertSQL, NULL, NULL, &errorMsg)==SQLITE_OK)
    {
        NSLog(@"insert ok");
    }else{
        NSLog(@"insert error:%s",errorMsg);
        sqlite3_free(errorMsg);
    }

7.查找數(shù)據(jù)

sql = @"select * from users";
    sqlite3_stmt *stmt;
    //查找數(shù)據(jù)
    if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt, nil)==SQLITE_OK)
    {
        while (sqlite3_step(stmt)==SQLITE_ROW) {
            int userId=sqlite3_column_int(stmt, 0);
            const unsigned char *password= sqlite3_column_text(stmt, 1);
            NSLog(@"UserId:%i,password:%s",userId,password);
        }
    }

8.更新數(shù)據(jù)

const char *sqlUpdate="update users set Password=?where User_id=?";
    if (sqlite3_prepare_v2(database, sqlUpdate, -1, &stmt, NULL)!=SQLITE_OK) {
        NSLog(@"Error:%s",sqlite3_errmsg(database));
    }
    const char* newPass="6666";
    sqlite3_bind_text(stmt, 1, newPass, -1, SQLITE_TRANSIENT);
    sqlite3_bind_int(stmt, 2, 1);
    sqlite3_step(stmt);
    sqlite3_reset(stmt);

iOS開發(fā)中的SQLite知識總結(jié)

1.查詢優(yōu)化

(1)使用索引

當(dāng)表中的數(shù)據(jù)太多時,建立索引可以明顯提高查詢速度

創(chuàng)建索引

sql> CREATE INDEX 索引名 ON 表(字段1[ASC,DESC],字段2[ASC,DESC]...)

刪除索引

sql> DROP INDEX 索引名

重建索引

sql> REINDEX [索引名,表名]

(2)數(shù)據(jù)分析

對表的索引的分析,ANALYZE命令令集合關(guān)于索引的統(tǒng)計(jì)信息并將它們儲存在數(shù)據(jù)庫的一個特殊表中,查詢優(yōu)化器可以用該表來制作更好的索引選擇。 若不給出參數(shù),所有附加數(shù)據(jù)庫中的所有索引被分析。若參數(shù)給出數(shù)據(jù)庫名,該數(shù)據(jù)庫中的所有索引被分析。若給出表名 作參數(shù),則只有關(guān)聯(lián)該表的索引被分析。

sql> ANALYZE [索引名,表名]

2.數(shù)據(jù)清理

大量的刪除表中的數(shù)據(jù),SQLite并沒有釋放這些空間,需要運(yùn)行如下命令精簡數(shù)據(jù)庫

sqlite> VACUUM;

3.數(shù)據(jù)加密

(1)自己源碼編譯

實(shí)現(xiàn)源碼中預(yù)留的加密解密接口

(2)使用SQLCipher

源碼在這里

step by step的使用過程在這里注意文章中幾個宏的下劃線沒有加,不要盲目的復(fù)制粘貼

上一步的SQLCipher源碼編譯后,目錄里面會有個sqlite的命令行程序,使用這個程序就可以給本地的數(shù)據(jù)庫加密,然后很方便的在程序中使用了,具體命令看他的文檔。

4.查看工具

MesaSQLite  Mac OS X下的查看工具,當(dāng)表的數(shù)據(jù)比較多時,有點(diǎn)慢

FireFox的 SQLite Manager插件

5.iOS開發(fā)第三方封裝

1.FMDataBase 方便的存取,在多線程中使用也很方便

2.sqlitepersistentobjects 直接讓NS對象本身就有save,load功能,讓使用者在不寫sql語句的情況下使用SQLite

已經(jīng)不再更新

 更多相關(guān)文章

·十款免費(fèi)iOS開發(fā)輔助工具推薦
·iOS開發(fā)入門:Xcode免證書真機(jī)調(diào)試
·iOS開發(fā)入門:Xcode調(diào)試技巧
·iOS開發(fā)入門:Xcode常用快捷鍵
·iOS開發(fā)入門:Xcode