1.iOS開發中的數據通常指sqlite,而若是鏈接服務器,那就另說,那就不是iOS開發直接操做其它數據庫,譬如SqlSever,Mysql,Orical。要使用數據庫sqlite,首先將libsqlite3.0.dylib加到項目中。5.0以後的版本導入數據庫頭文件變成了#import "sqlite3.h",以前還有指定路徑user,這也說明蘋果不斷改進着。
2.iOS開發中有個沙箱的概念。什麼是沙箱?簡單的理解就是指在iOS開發中程序能操做的位置只能在指定目錄,意思就是隻能在沙箱中進行操做。譬如文件的寫入寫出,要傳輸的圖片,都只能放在那個目錄,固然你也能夠在其中創建子目錄。數據庫的本質其實也是一個文件,因此也只能在目錄中進行,那麼數據庫創建的路徑也只能在這個目錄下。
3.首先是數據庫要保存的路徑
NSArray *array=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPaths=[array objectAtIndex:0];
NSString *databasePaths=[documentsPaths stringByAppendingPathComponent:"test_DB"];
4.而後創建數據庫,新建數據庫這個蘋果作的很是好,很是方便
sqlite3 *database;
//新建數據庫,存在則打開,不存在則建立
if (sqlite3_open([databasePaths UTF8String], &database)==SQLITE_OK)
{
NSLog("open success");
else {
NSLog("open failed");
}
}
5.對數據庫建表操做:若是在些程序的過程當中,發現表的字段要更改,必定要刪除以前的表,如何作,就是刪除程序或者換個表名,主鍵是自增的
char *errorMsg;
NSString *sql="create table if not exists users(User_id integer primary key,Password text)";
//建立表
if (sqlite3_exec(database, [sql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK )
{
NSLog("create success");
}else{
NSLog("create error:%s",errorMsg);
sqlite3_free(errorMsg);
}
6.插入數據
NSString *insertSQLStr = [NSString stringWithFormat:"insert into users(Password)values ("%")",str1];
const char *insertSQL=[insertSQLStr UTF8String];
//插入數據
if (sqlite3_exec(database, insertSQL, NULL, NULL, &errorMsg)==SQLITE_OK)
{
NSLog("insert ok");
}else{
NSLog("insert error:%s",errorMsg);
sqlite3_free(errorMsg);
}
7.查找數據
sql = "select * from users";
sqlite3_stmt *stmt;
//查找數據
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.更新數據
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開發中的SQLite知識總結
1.查詢優化
(1)使用索引
當表中的數據太多時,創建索引能夠明顯提升查詢速度
建立索引
sql> CREATE INDEX 索引名 ON 表(字段1[ASC,DESC],字段2[ASC,DESC]...)
刪除索引
sql> DROP INDEX 索引名
重建索引
sql> REINDEX [索引名,表名]
(2)數據分析
對錶的索引的分析,ANALYZE命令令集合關於索引的統計信息並將它們儲存在數據庫的一個特殊表中,查詢優化器能夠用該表來製做更好的索引選擇。 若不給出參數,全部附加數據庫中的全部索引被分析。若參數給出數據庫名,該數據庫中的全部索引被分析。若給出表名 做參數,則只有關聯該表的索引被分析。
sql> ANALYZE [索引名,表名]
2.數據清理
大量的刪除表中的數據,SQLite並無釋放這些空間,須要運行以下命令精簡數據庫
sqlite> VACUUM;
3.數據加密
(1)本身源碼編譯
實現源碼中預留的加密解密接口
(2)使用SQLCipher
源碼在這裏
step by step的使用過程在這裏注意文章中幾個宏的下劃線沒有加,不要盲目的複製粘貼
上一步的SQLCipher源碼編譯後,目錄裏面會有個sqlite的命令行程序,使用這個程序就能夠給本地的數據庫加密,而後很方便的在程序中使用了,具體命令看他的文檔。
4.查看工具
MesaSQLite Mac OS X下的查看工具,當表的數據比較多時,有點慢
FireFox的 SQLite Manager插件
5.iOS開發第三方封裝
1.FMDataBase 方便的存取,在多線程中使用也很方便
2.sqlitepersistentobjects 直接讓NS對象自己就有save,load功能,讓使用者在不寫sql語句的狀況下使用SQLitesql