0426 FMDB && SQLite詳細小結



創建數據庫

// 第一種方法: 簡單設置路徑

FMDatabase*db = [FMDatabasedatabaseWithPath:@"/tmp/timeRecord.db"];

//

第二種方法 指定路徑

//paths:ios下Document路徑,Document為ios中可讀寫的文件夾

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

NSString*documentDirectory = [pathsobjectAtIndex:0];

//_dbPath:數據庫路徑,在Document中。

_dbPath= [documentDirectorystringByAppendingPathComponent:@"timeRecord.db"];//這里寫的是文件名,如果沒有會自動創建,別寫成第一種方法的路徑名稱了。

FMDatabase*db = [FMDatabasedatabaseWithPath:_dbPath];

數據庫db操作的兩種方式

查詢數據的方法

[db

executeQuery:@"SELECT

number,time FROM time_record"];

除查詢數據以外的其它操作

[dbexecuteUpdate:@"INSERT

INTO time_record(number,time) VALUES (?,?)",_timeModel.number,_timeModel.time];

SQLite語句

創表存儲的四種格式

integer : 整型值

real : 浮點值

text :

文本字符串

blob :

二進制數據(比如文件)

創表的語句

[db executeUpdate:@"CREATE

TABLE IF NOT EXISTS time_record(rowid interger PRIMARY KEY,number text NOT NULL,time text NOT NULL)"];

刪表的語句

DROP TABLE IF EXISTS time_record

插入數據的語句

[dbexecuteUpdate:@"INSERT

INTO time_record(number,time) VALUES (?,?)",_timeModel.number,_timeModel.time];

更新數據的語句

UPDATE t_student SET name = ‘jack’, age = 20 WHERE age < 30 ; //會將所有小于30歲的記錄的名字都改成jack

刪除數據的語句

DELETE FROM t_student WHERE age > 30;//如果沒有后面的限制條件,會將整張表刪除。

查詢數據的語句

FMResultSet *rs = [db executeQuery:@"SELECT

number,time FROM time_record"];

select * from 表名;//查詢所有的字段

條件語句常見的格式

where字段=某個值;//不能用兩個=

where字段is某個值;//is相當于=

where字段!=某個值;

where字段isnot某個值;//isnot相當于!=

where字段>某個值;

where字段1=某個值and字段2>某個值;//and相當于C語言中的&&

where字段1=某個值or字段2=某個值;//or相當于C語言中的

||

FMResultSet *rs = [db executeQuery:@"SELECT

number,time FROM time_record"];

[dbbeginTransaction];

[dbcommit];

[dbclose];

[_tableViewreloadData];//如果是_tableView需要刷新一下,這句不能漏

起別名的格式(字段和表都可以起別名)

select 字段1 別名 , 字段2 別名 , … from 表名 別名 ;

select

name myname, age myage from t_student ;

給name起個叫做myname的別名,給age起個叫做myage的別名

select字段1別名,字段2as別名, …from表名as別名;

select別名.字段1,別名.字段2, …from表名別名;

select s.name,

s.age from t_student s ;

給t_student表起個別名叫做s,利用s來引用表中的字段

計算記錄的數量

select count (字段) from 表名 ;

select count (age)

from t_student ;

selectcount(*)from表名;

select count ( * ) from

t_student where

score >= 60;

對查詢出來的結果用ORDER BY進行排序

select * from

t_student order by 字段 ;

select*fromt_studentorder byage;

select*fromt_studentorder byageasc;//升序(默認)

也可以用多個字段進行排序

select * from

t_student order by age asc, height

desc ;//先按照年齡排序(升序),年齡相等就按照身高排序(降序)

使用limit可以精確地控制查詢結果的數量,比如每次只查詢10條數據,用于翻頁

select * from 表名 limit 數值1, 數值2 ;

select * from

t_student limit 4,

8 ;//可以理解為:跳過最前面4條語句,然后取8條記錄

limit常用來做分頁查詢,比如每頁固定顯示5條數據,那么應該這樣取數據

第1頁:limit 0, 5

第2頁:limit 5, 5

第3頁:limit 10, 5

第n頁:limit 5*(n-1), 5

select*fromt_studentlimit7;

相當于select*fromt_studentlimit0, 7;

創表簡單的約束

not null :規定字段的值不能為null

unique:規定字段的值必須唯一

default:指定字段的默認值

示例

create table t_student

(id integer PRIMARY KEY

AUTOINCREMENT, name text not null unique,

age integer not null default 1) ;

name字段不能為null,并且唯一

age字段不能為null,并且默認為1

主鍵字段默認就包含了not null 和 unique 兩個約束

如果想要讓主鍵自動增長(必須是integer類型),應該增加autoincrement

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學生表Course(C#,Cname...
    哈哈海閱讀 1,254評論 0 7
  • 什么是SQLite?數據庫存儲數據的步驟 ●SQLite是一款輕型的嵌入式數據庫,它占用資源非常的低,在嵌入式設備...
    飛行的貓閱讀 2,525評論 1 7
  • SQLite基礎 1.簡介 iOS數據數據存儲的方式Plist(NSArray\NSDictionary)Pref...
    小盒盒閱讀 748評論 1 11
  • iOS中的數據存儲方式 Plist(NSArray\NSDictionary) Preference(偏好設置\N...
    JonesCxy閱讀 686評論 0 3
  • 什么是SQL數據庫: SQL是Structured Query Language(結構化查詢語言)的縮寫。SQL是...
    西貝巴巴閱讀 1,855評論 0 10