ios開發中如何使用sqlite資料庫

來源:互聯網
上載者:User

標籤:

首先,使用sqlite儲存資料,需要添加libsqlite3.dylib 這個動態庫,然後 添加動態庫的主標頭檔 #import <sqlite3.h>

// db就是資料庫的象徵,如果要進行CRUD(增刪改查),得操作db這個執行個體
@property (nonatomic, assign) sqlite3 *db;

 

第一步: 開啟資料庫。 當系統第一次用到資料庫時, 我們先建立一個資料庫檔案,並建立表,就在這一步。

// 獲得資料庫檔案的路徑,即沙箱
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filename = [doc stringByAppendingPathComponent:@"students.sqlite"];
// 將OC字串 轉成 C語言字串
const char *cfilename = filename.UTF8String;
// 1.開啟資料庫(如果資料庫檔案不存在,sqlite3_open函數會自動建立資料庫檔案)
int result = sqlite3_open(cfilename, &_db);    // 這個open方法 就是開啟資料庫,傳一個c語言的字串和 db
if (result == SQLITE_OK) { // 開啟成功
  NSLog(@"成功開啟資料庫");

// 2.創表
const char *sql = "CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);";
  char *erroMsg = NULL;
  result = sqlite3_exec(self.db, sql, NULL, NULL, &erroMsg);
if (result == SQLITE_OK) {
  NSLog(@"成功創表");
} else {

  NSLog(@"創表失敗--%s--%@-%d", erroMsg, [NSString stringWithUTF8String:__FILE__], __LINE__);  //這個可以知道 錯誤在哪個檔案的 第幾行
}
} else {
  NSLog(@"開啟資料庫失敗");
}

 

第二部 : 插入/添加資料

下面以插入/添加 20條資料為例:

for (int i = 0; i<20; i++) {
// 1.拼接SQL語句
  NSString *name = [NSString stringWithFormat:@"Jack-%d", arc4random_uniform(100)];
  int age = arc4random_uniform(20) + 30;
  NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name, age) VALUES (‘%@‘, %d);", name, age];   // 看清該方法INSERT INTO

// 2.執行SQL語句
  char *erroMsg = NULL;
  sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &erroMsg);  //該sqlite方法就是 插入資料庫資料
  if (erroMsg) {  //如果有錯誤
  NSLog(@"插入資料失敗--%s", erroMsg);
  } else {
  NSLog(@"成功插入資料");
  }
}

刪除資料 和插入資料 一樣,只需更換一下 sql語句。

查詢資料:

const char *sql = "SELECT id, name, age FROM t_student WHERE age <= 30;";  //sql語句,查詢條件
// 進行查詢前的準備工作
// -1 代表系統會自動計算SQL語句的長度
// sqlite3_stmt:用來取資料


sqlite3_stmt *stmt = NULL;
if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL) == SQLITE_OK) { // SQL語句沒有問題
NSLog(@"查詢語句沒有問題");

// 每調一次sqlite3_step函數,stmt就會指向下一條記錄
  while (sqlite3_step(stmt) == SQLITE_ROW) { // 找到一條記錄
// 取出資料

// 取出第0欄欄位的值(int類型的值)
  int ID = sqlite3_column_int(stmt, 0);

// 取出第1欄欄位的值(tex類型的值)
  const unsigned char *name = sqlite3_column_text(stmt, 1);

// 取出第2欄欄位的值(int類型的值)
  int age = sqlite3_column_int(stmt, 2);

  NSLog(@"%d %s %d", ID, name, age);
}
} else {
  NSLog(@"查詢語句有問題");
}

ios開發中如何使用sqlite資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.