IOS SQLite語法基礎

来源:http://www.cnblogs.com/huyp/archive/2016/01/18/5139946.html
-Advertisement-
Play Games

分享SQLite語句的基礎知識,是很基礎的部分,只涉及"增","刪","改","查"4個語法.不涉及錶鏈接等內容.以後我會更新錶鏈接的隨筆. github上有一個SQL的Demo,包含增刪改查. UI如圖: url: --- >https://github.com/huyp/SQLite3_D...


  分享SQLite語句的基礎知識,是很基礎的部分,只涉及"增","刪","改","查"4個語法.不涉及錶鏈接等內容.以後我會更新錶鏈接的隨筆.

  github上有一個SQL的Demo,包含增刪改查. UI如圖: url: --- > https://github.com/huyp/SQLite3_Demo.git

  使用SQLite,首先要手動導入libsqlite3.tbd庫. 點擊工程 ---- Build Phases ---- Link Binary With Libraries  點擊 + 號,輸入libsqlite3. 你會發現兩個庫libsqlite3.tbd 和 libsqlite3.0.tbd ,導入其中任意一個即可. 這兩個庫有什麼區別呢? 你可以把 libsqlite3.0.tbd 看做是一個快捷方式, libsqlite3.tbd 是真正的庫. 

 

  使用SQLite之前,你需要先瞭解一些SQL語句.這裡就寫一些簡單的語句,詳細的語法還要認真學習才能掌握.

  SQLite使用的是C語言.iOS開發要轉成char類型

  使用前,導入sqlite3頭文件,定義一個資料庫

 1 #import <sqlite3.h>
 2 
 3 @interface ViewController ()
 4 
 5 @property (assign,nonatomic)sqlite3 * database;
 6 
 7 @end
 8 
 9 @implementation ViewController
10 
11 @synthesize database;

 

  創建一個學生表格,表格中有ID,name,age三個屬性,ID是主鍵.

  創建表格 : create table if not exists t_student (id integer primary key autoincrement, name text, age integer)"

  create table : 創建一個表格.  if not exists : 如果沒有被創建過.  t_student : 表格名字. id integer : ID integer類型(整數). primary key : 主鍵. autoincreament : 自動+1.  name text : name 類型(字元串)  age integer類型(整數). 

 1     //把文本框轉換成C語言
 2     const char * name = [_text1.text UTF8String];//名字
 3     const char * age = [_text2.text UTF8String];//年齡
 4     //增加一行語句
 5     char * sql = "insert into t_student (name, age) values (?,?)";
 6     /**
 7      sqlite 操作二進位數據需要用一個輔助的數據類型:sqlite3_stmt * 。
 8      這個數據類型 記錄了一個“sql語句”。為什麼我把 “sql語句” 用雙引號引起來?因為你可以把 sqlite3_stmt * 所表示的內容看成是 sql語句,但是實際上它不是我們所熟知的sql語句。它是一個已經把sql語句解析了的、用sqlite自己標記記錄的內部數據結構。
 9      */
10     sqlite3_stmt * stmt;
11     
12     //這裡要執行sqlite語句了 (資料庫,SQL語句,-1,&stmt,NULL); 增刪改查都是用這一句代碼
13     //不同的地方就是sql語句的不同,sqlite3_bind_text()中的值不同而已.
14     int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);
15     if (result == SQLITE_OK) {
16         sqlite3_bind_text(stmt, 1, name, -1, NULL);
17         sqlite3_bind_text(stmt, 2, age, -1, NULL);
18     }
19     else {
20         NSLog(@"準備失敗");
21     }
22     //檢驗是否操作完成
23     if (sqlite3_step(stmt) == SQLITE_DONE) {
24         NSLog(@"操作完成");
25     }
26     else {
27         NSLog(@"操作失敗");
28     }
29     //每次調用sqlite3_prepare 函數sqlite 會重新開闢sqlite3_stmt空間,
30     //所以在使用同一個sqlite3_stmt 指針再次調用sqlite3_prepare 前
31     //需要調用sqlite3_finalize先釋放空間
32     sqlite3_finalize(stmt);

 

  向資料庫中插入對象: insert into t_student (name, age) values (?,?)

  insert into t_student : 向表t_student中插入數據.  (name, age) : 數據名.  values (?,?) : 值(值1,值2).

 1  //把文本框轉換成C語言
 2     const char * name = "張三";//名字
 3     const char * age = "20";//年齡
 4     //增加一行語句
 5     char * sql = "insert into t_student (name, age) values (?,?)";
 6     sqlite3_stmt * stmt;
 7     int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);
 8     if (result == SQLITE_OK) {
 9         sqlite3_bind_text(stmt, 1, name, -1, NULL);
10         sqlite3_bind_text(stmt, 2, age, -1, NULL);
11     }
12     else {
13         NSLog(@"準備失敗");
14     }
15     //檢驗是否操作完成
16     if (sqlite3_step(stmt) == SQLITE_DONE) {
17         NSLog(@"操作完成");
18     }
19     else {
20         NSLog(@"操作失敗");
21     }
22     //每次調用sqlite3_prepare 函數sqlite 會重新開闢sqlite3_stmt空間,
23     //所以在使用同一個sqlite3_stmt 指針再次調用sqlite3_prepare 前
24     //需要調用sqlite3_finalize先釋放空間
25     sqlite3_finalize(stmt);

 

  刪除資料庫中的對象 : delete from t_student where id = ?

  delete from t_sudent : 刪除t_student表格中的   刪除id = ? 的數據 .

 1     int a = [_text1.text intValue];
 2     sqlite3_stmt * stmt;
 3     char * sql = "delete from t_student where id = ?";
 4     int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL);
 5     if (result == SQLITE_OK) {
 6         result = sqlite3_bind_int(stmt, 1, a);
 7         if (result == SQLITE_OK) {
 8             result = sqlite3_step(stmt);
 9             if (result == SQLITE_DONE) {
10                 NSLog(@"刪除成功");
11             }
12             else {
13                 NSLog(@"刪除失敗");
14             }
15         }
16     }
17     else {
18         NSLog(@"刪除失敗");
19     }
20     
21     sqlite3_finalize(stmt);

  

  更改數據 :  update t_student set name = ? where id = ?

  update t_student : 更新表格.  set name = : 設置名字為.  id = 多少的數據.

  就是修改id = ? 的名字.

 1    const char * ID = [_text1.text UTF8String];
 2     const char * newname = [_text2.text UTF8String];
 3     sqlite3_stmt * stmt;
 4     char * sql = "update t_student set name = ? where id = ?";
 5     int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL);
 6     if (result == SQLITE_OK) {
 7         result = sqlite3_bind_text(stmt, 1, newname, -1, NULL);
 8         result = sqlite3_bind_text(stmt, 2, ID, -1, NULL);
 9         if (result != SQLITE_OK) {
10             NSLog(@"更新數據有問題");
11         }
12         if (sqlite3_step(stmt) != SQLITE_DONE) {
13             NSLog(@"更新數據不成功");
14         }
15     }
16     else {
17         NSLog(@"修改數據失敗");
18     }
19     sqlite3_finalize(stmt);

 

  查詢資料庫中的所有數據  select id , name , age from t_student

  select : 查詢.   id,name,age  : ID,名字,年齡 這三個屬性.   from t_student : 從t_student這個表格中 

 1 char * sql = "select id , name , age from t_student";
 2     sqlite3_stmt * stmt;
 3     int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL);
 4     if (result == SQLITE_OK) {
 5         //sqlite3_step(stmt) == SQLITE_ROW 查詢時使用
 6         while (sqlite3_step(stmt) == SQLITE_ROW) {
 7             int ID = sqlite3_column_int(stmt, 0);
 8             char * name = (char *)sqlite3_column_text(stmt, 1);
 9             NSString * strName = [NSString stringWithUTF8String:name];
10             int age = sqlite3_column_int(stmt, 2);
11             NSLog(@"%d,%@,%d",ID,strName,age);
12         }
13     }
14     sqlite3_finalize(stmt);

 

 

 

  

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一,效果圖。二,工程圖。三,代碼。RootViewController.h#import //加入頭文件#import "DCPathButton.h"@interface RootViewController : [email protected]#i...
  • KOTLIN開發語言文檔(官方文檔)第二章、基本概念
  • Listview控制項不像其他安卓控制項那種直接拖拽到界面上就能用,而是採用類似J2EE中的MVC模型的方式使用,需要通過適配器將某種樣式的數據或控制項添加到其上而使用.MVC模型實現原理是 數據模型M(Model) 存放數據,利用控制器C (Controller)將數據顯示在視圖V (View)上。利用...
  • 本文轉載於:http://bijian1013.iteye.com/blog/2166855package com.bijian.study;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IO...
  • 一、1xx消息 這一類型的狀態碼,代表請求已經接受,需要繼續處理。 這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,並以空行結束。 由於HTTP/1.0協議中沒有定義任何1xx狀態碼,所以除非在某些試驗條件下,伺服器禁止向此類客戶端發送1xx響應。 這些狀態碼代表的響應都是信息性的,...
  • 最近在模擬器上調試發現獲取位置坐標信息的時候會報錯,錯誤信息: didFailWithError: Error Domain=kCLErrorDomain Code=0 “The operation couldn’t be completed. (kCLErrorDomain error 0.)”。...
  • 真機測試的過程中,出現這種Bug解決方案:手機裡面已經有了這個項目,刪除重新運行即可。
  • Eclipse和IntelliJ IDEA系的IDE都有自動生成文檔註釋的功能,Xcode雖然安裝了VVDocument,但是仍然感覺註釋的功能不是很完善,於是今天整理了一下書寫文檔註釋的一些用法。首先要說的就是文檔註釋提取的工具:主要是介紹HeaderDoc和appleDoc1.我們平常長按opt...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...