Ⅰ sqlite怎麼保證數據安全 ios
我們將會在一個demo上這些這些測試,你可以從我的github賬號上下載這個例子程序。對於CoreData的例子,你可以從這下載例子程序。本例有一個不同點就是我們將會在模擬器上運行這些應用,而不是在設備上運行。這樣做的目的是為了證明在前面文章中的操作都可以通過Xcode來把這些應用運行在模擬器上。當然,你也可以使用前面文章中的步驟把這應用安裝到設備上。
NSUserDefaults
保存用戶信息和屬性的一個非常普通的方法就是使用NSUserDefaults。保存在NSUserDefaults中的信息在你的應用關閉後再次打開之後依然存在。保存信息到NSUserDefaults的一個例子就是保存用戶是否已登錄的狀態。我們把用戶的登錄狀態保存到NSUserDefaults以便用戶關閉應用再次打開應用的時候,應用能夠從NSUserDefaults獲取數據,根據用戶是否登錄展示不同的界面。有些應用也用這個功能來保存機密數據,比如用戶的訪問令牌,以便下次應用登錄的時候,它們能夠使用這個令牌來再次認證用戶。
從我的github可以下載例子應用,運行起來。你可以得到下面的界面,現在輸入一些信息到與NSUserDefaults相關的文本框,然後點擊下面的「Save in NSUserDefaults」。這樣數據就保存到NSUserDefaults了。
許多人不知道的是保存到NSUserDefaults的數據並沒有加密,因此可以很容易的從應用的包中看到。NSUserDefaults被存在一個以應用的bundle id為名稱的plist文件中。 首先,我們需要找到我們應用的bundle id。因為我們在模擬器上運行,我們可以在/Users/$username/Library/Application Support/iPhone Simulator/$ios version of simulator/Applications/找到應用。我這的路徑是:「Users/prateekgianchandani/Library/Application Support/iPhone Simulator/6.1/Applications」。
一旦我們找到那個目錄,我們可以看到一堆應用。我們可以用最近修改的日期找到我們的應用,因為它是最近修改的。
進入到應用的bundle裡面。通過NSUserDefaults保存的數據都可以在如下圖所示的Library -> Preferences -> $AppBundleId.plist文件中找到。
打開這個plist文件,我們可以清楚的看到這個文件的內容。
有時候,plist文件會以二進制格式保存,因此可能第一下看到會覺得不可讀。你可以用plutil工具把它轉成xml格式,或者直接用iExplorer在設備上查看。
Ⅱ 怎麼看到ios sqlite資料庫
IOS8以前版本, 如果是模擬器的話, 在這個路徑中找到你的應用: /Users/你的用戶名/Library/Application Support/iPhone Simulator/5.1/Applications/應用目錄 IOS8在以下路徑中找到你的應用 /Users/username/Library/Developer/CoreSimulator/Dev...
Ⅲ ios sqlite3有沒有版本號概念
有的,但是一般用不到那些新功能呢。用系統提供的sqlite3即可滿足一般開發呢!
Ⅳ 如何使用Sqlite3資料庫 iOS Sqlite3數據類型
sqlite3隻能操作資料庫文件。它沒有像mysql那樣的資料庫的概念,它一個文件就是一個資料庫,一個資料庫就是一個文件
所以你打開資料庫文件之後,接下去就是操作「表」了,沒有「資料庫」了
Ⅳ ios 從哪些方面去做sqlite 資料庫的優化
http://jingyan..com/article/1e5468f91ffd15484961b794.html
這個是網路經驗
SQLite是嵌入式的和輕量級的sql資料庫。廣泛用於包括瀏覽器、ios、Android以及一些便攜需求的小型web應用系統。
SQLite是MySQL的精簡版,無需伺服器就能進行;限制條件:必須手動創建資料庫,沒有面向對象的介面;
要想在工程中使用SQLite,需要將SQLite的庫添加到工程:
在本工程中的.h文件中引用這個庫:
創建資料庫:
接下來如果該資料庫不存在需要創建這個資料庫,創建的過程寫在viewDidLoad裡面:
因為SQLite資料庫是文件資料庫,是保存在文件系統中的,ios下:
Documents:應用中用戶數據可以放在這里,iTunes備份和恢復的時候會包括此目錄
tmp:存放臨時文件,iTunes不會備份和恢復此目錄,此目錄下文件可能會在應用退出後刪除
Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除
我們的資料庫文件是保存在Documents下的。
切記,因為用的是C語法,sqlite3_open傳入的是database的地址!
Ⅵ 蘋果電腦怎麼用命令行查看sqlite
蘋果電腦怎麼用命令行查看sqlite
一直使用Eclipse開發Android。DDMS下有一個explorer可以查看data/data下各應用的數據,其中就包括database。但是這種方法只能導出來看,很不方便,於是就想到直接在adb shell里使用SqLite3命令查看更加方便。
cmd命令基礎:
常用命令:
dir 顯示文件列表
cls 清屏
cd 切換目錄
ls 顯示文件列表,cmd無效,adb 有效
windows應用命令,直接輸入應用名字即可打開程序:(列舉幾個)
mspaint打開 畫圖板
notepad打開 記事本
explorer打開 資源管理器
calc 啟動計算器
命令快捷鍵:
ESC:清除當前 命令 行;
F7:顯示 命令 歷史記錄,以圖形列表窗的形式給出所有曾經輸入的命令,並可用上下箭頭鍵選擇再次執行該命令。
F8:搜索 命令 的歷史記錄,循環顯示所有曾經輸入的命令,直到按下 回車鍵 為止;
F9:按編號 選擇命令 ,以圖形對話框方式要求您輸入命令所對應的編號(從0開始),並將該命令顯示在 屏幕 上
Ctrl+H:刪除 游標 左邊的一個字元;
Ctrl+C Ctrl+Break,強行中止 命令 執行
Ctrl+M:表示回車確認鍵;
Alt+F7:清除所有曾經輸入的 命令 歷史記錄
Alt+PrintScreen:截取屏幕上當前 命令 窗里的內容。
SqLite命令舉例:
先切換到相關目錄
adb shell
cd data/data/com.example.demo1023/databases
ls 會顯示當前應用下所有的資料庫:
sqlite3 db1.db 即進入到db1.db資料庫就可以執行相關的sqlite3的命令了
.help ;查看sqlite3設置命令幫助:
Ⅶ iOS簡單的多表查詢以及SQLite注意點
多表查詢
假如有兩張表:
表A:
表B:
這里我們是通過相同列名departmentNumber來進行條件查詢相關信息:
1.內連接查詢:返回的結果只有滿足departmentNumber相等的結果
sql語句(有兩種方式):
```
-->select a.name, b.name from A as a, B as b where a.departmentNumber = b.departmentNumber
-->select a.name, b.name from A as a inner join B as b on a.departmentNumber = b.departmentNumber
```
查詢結果:
2.左外鏈接查詢:返回的結果只和左邊的表有關(這里假定A是左邊的表),右邊表如果沒有對應值,就為NULL
sql語句:
```
-->select a.name, b.name from A as a left outer join B as b on a.departmentNumber= b.departmentNumber
```
返回結果:
3.右外鏈接查詢:返回的結果只和右邊的表有關(這里假定B是右表),那麼如果左邊表是沒有對應值,就為NULL
sql語句:
```
-->select a.name, b.name from A as a right OUTER join B as b on a.departmentNumber = b.departmentNumber
```
返回結果:
4.完全外鏈接查詢:想獲取兩個表所有信息,如果兩個表內沒有對應值的就用NULL表示
sql語句:
```
-->select a.name, b.name from B as b full OUTER join A as a on a.departmentNumber = b.departmentNumber
```
返回結果:
注意點:在sqlite中是不支持右外連接和完全外鏈接的,但是可以通過以下方式來進行連接:
1.sqlite中的右外連接:將左外連接的表換個順序就可以了
```
-->select a.name, b.name from B as B left outer join A as A on a.departmentNumber = b.departmentNumber
```
返回結果:
2.sqlite中的完全外鏈接:用關鍵字union將兩句連接起來進行合並
```
-->select a.name, b.name from B as b left OUTER A as a on a.departmentNumber = b.departmentNumber
UNION
select a.name, b.name from A as a left outer B as b on a.departmentNumber = b.departmentNumber
```
返回結果:
Ⅷ ios 怎樣打開sqlite資料庫
新建Empty Appliation,添加一個HomeViewController,和一個組件libsqlite3.dylib,來支持對sqlite3的連接,關閉,增刪改查等操作。
1. HomeViewController.h代碼:
#import <UIKit/UIKit.h>
#import "sqlite3.h"
@interface HomeViewController : UIViewController{
sqlite3 *db; //聲明一個sqlite3資料庫
}
- (NSString *)filePath;//資料庫文件的路徑。一般在沙箱的Documents里邊操作
@end
2. HomeViewController.m代碼:
#import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
//該方法用於返回資料庫在Documents文件夾中的全路徑信息
- (NSString *)filePath{
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir :@"Contacts.sqlite"];
}
//打開資料庫的方法
- (void)openDB{
if (sqlite3_open([[self filePath] UTF8String], &db) != SQLITE_OK) {
sqlite3_close(db);
NSAssert(0, @"資料庫打開失敗。");
}
}
- (void)getAllContacts{
NSString *sql = @"SELECT * FROM members";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
char *name = (char *)sqlite3_column_text(statement, 0);
NSString *nameStr = [[NSString alloc] initWithUTF8String:name];
char *email = (char *)sqlite3_column_text(statement, 1);
NSString *emailStr = [[NSString alloc] initWithUTF8String:email];
char *birthday = (char *)sqlite3_column_text(statement, 2);
NSString *birthdayStr = [[NSString alloc] initWithUTF8String:birthday];
NSString *info = [[NSString alloc] initWithFormat:@"%@ - %@ - %@",
nameStr, emailStr, birthdayStr];
NSLog(info);
[nameStr release];
[emailStr release];
[birthdayStr release];
[info release];
}
sqlite3_finalize(statement);
}
}
Ⅸ 小弟剛開始研究ios,怎麼連接以及建立sqlite資料庫
iOS 上的sqlite資料庫比較好添加,一般只需要以下兩個步驟:
1. 添加sqlite3.dylib,可以通過工程->添加framework和library的方式來添加,位置一般在/usr/lib/libsqlite.dylib
2. 添加sqlite頭文件,一般在/usr/include下。
這樣准備工作就做完了。
創建sqlite db:
sqlite3 *database
sqlite3_open(DB_Path, &database);
Ⅹ ios中sqlite怎麼存儲數據的
SQLite3是嵌入在iOS中的關系型資料庫,對於存儲大規模的數據很有效。SQLite3使得不必將每個對象都加到內存中。
基本操作:
(1)打開或者創建資料庫
sqlite3 *database; int result = sqlite3_open("/path/databaseFile", &database);
如果/path/databaseFile不存在,則創建它,否則打開它。如果result的值是SQLITE_OK,則表明我們的操作成功。
注意上述語句中資料庫文件的地址字元串前面沒有@字元,它是一個C字元串。將NSString字元串轉成C字元串的方法是:
const char *cString = [nsString UTF8String];
(2)關閉資料庫
sqlite3_close(database);
(3)創建一個表格
char *errorMsg; const char *createSQL = "CREATE TABLE IF NOT EXISTS PEOPLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIELD_DATA TEXT)"; int result = sqlite3_exec(database, createSQL, NULL, NULL, &errorMsg);
執行之後,如果result的值是SQLITE_OK,則表明執行成功;否則,錯誤信息存儲在errorMsg中。
sqlite3_exec這個方法可以執行那些沒有返回結果的操作,例如創建、插入、刪除等。
(4)查詢操作
NSString *query = @"SELECT ID, FIELD_DATA FROM FIELDS ORDER BY ROW"; sqlite3_stmt *statement; int result = sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil);
如果result的值是SQLITE_OK,則表明准備好statement,接下來執行查詢:
while (sqlite3_step(statement) == SQLITE_ROW) { int rowNum = sqlite3_column_int(statement, 0); char *rowData = (char *)sqlite3_column_text(statement, 1); NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData]; // Do something with the data here } sqlite3_finalize(statement);
使用過其他資料庫的話應該很好理解這段語句,這個就是依次將每行的數據存在statement中,然後根據每行的欄位取出數據。
(5)使用約束變數
實際操作時經常使用叫做約束變數的東西來構造SQL字元串,從而進行插入、查詢或者刪除等。
例如,要執行帶兩個約束變數的插入操作,第一個變數是int類型,第二個是C字元串:
char *sql = "insert into oneTable values (?, ?);"; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(database, sql, -1, &stmt, nil) == SQLITE_OK) { sqlite3_bind_int(stmt, 1, 235); sqlite3_bind_text(stmt, 2, "valueString", -1, NULL); } if (sqlite3_step(stmt) != SQLITE_DONE) NSLog(@"Something is Wrong!"); sqlite3_finalize(stmt);
這里,sqlite3_bind_int(stmt, 1, 235);有三個參數:
第一個是sqlite3_stmt類型的變數,在之前的sqlite3_prepare_v2中使用的。
第二個是所約束變數的標簽index。
第三個參數是要加的值。
有一些函數多出兩個變數,例如
sqlite3_bind_text(stmt, 2, "valueString", -1, NULL);
這句,第四個參數代表第三個參數中需要傳遞的長度。對於C字元串來說,-1表示傳遞全部字元串。
第五個參數是一個回調函數,比如執行後做內存清除工作。