iOS中數據持久化分為四種:屬性列表、對象歸檔、SQLite3和Core Data,SQLite3數據庫操作是一個必不或缺的技術。
不區分大小寫
每一句以;結尾
integer:整型
real:浮點值
text:文本字符串
blob:二進制類型
create 表名(字段名1 字段類型,字段名2 字段類型,字段名3 字段類型,....);
create table t_Student(id integer name text,age integer,addr text);
為了方便准確記錄數據便於區分每組數據,保證每組數據中有唯一區別的地方就需要添加一個主鍵約束用來標識記錄的唯一性
create table t_Student(id integer primary key autoincrement name text,age integer,addr text);
autoincrement 自動增長
not null :規定字段的值不能為null
unique:規定字段的值必須唯一
default:指定字段的默認值
drop table 表名;
drop table t_Student;
insert into 表名(字段1,字段2,字段3,...)values(字段1的值,字段2的值,字段3的值,...);
insert into t_Student(name,age,addree)values('唐伯虎',788,'宋朝');
update 表名 set 字段1= 字段1的值 where 條件;
update t_Student set age = 1000 where name='唐伯虎';
delete from 表名 where 條件;
delete from t_Student where age < 100;
select 字段1,字段2,...from表名;
select *from 表名;
select * from t_Student;
select name,age,addree from t_Student;
select name from t_Student where age<100;
select count(字段)from 表名;
select count(*)from t_Student;
select count(age)from t_Student;
創建表時加 if not exists 是為了防止重復創建表,當表存在就不會創建表,若不存在就會創建,類似變量的懶加載
條件句中where 字段可以用>、<、=、is、!=、is not、or、and、它們表達的意思跟上學時代的英語數學課堂意思一樣,再這裡不再贅述。
as可以給表起別名,利用點語法可以訪問表內的字段
sqlite3 *db, 數據庫句柄,跟文件句柄FILE很類似
sqlite3_stmt *stmt, 這個相當於ODBC的Command對象,用於保存編譯好的SQL語句
sqlite3_open(), 打開數據庫,沒有數據庫時創建。
sqlite3_exec(), 執行非查詢的sql語句
sqlite3_bind_text(),設置占位符的內容
sqlite3_prepare_v2(),檢測查詢語句合法性
Sqlite3_step(), 在調用sqlite3_prepare後,使用這個函數在記錄集中移動。
Sqlite3_close(), 關閉數據庫文件
sqlite3_column_text(), 取text類型的數據。
sqlite3_column_blob(),取blob類型的數據
sqlite3_column_int(), 取int類型的數據
創建工程、添加sqlite3類庫包
//在沙盒中創建數據庫
NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];
int result =sqlite3_open(filename.UTF8String,&db);
if (result==SQLITE_OK) {
NSLog(@"成功創建數據庫並打開");
//創建一個張表
const char *sql="create table if not exists t_Student(id integer primary key autoincrement,name text,age integer,addr text);";
char *errorMesg=NULL;
int result=sqlite3_exec(db,sql,NULL,NULL,&errorMesg);
if (result==SQLITE_OK) {
NSLog(@"成功創建表");
}
else
{
NSLog(@"創建表失敗%s",errorMesg);
}
}
else
{
NSLog(@"打開數據庫失敗");
}
增加數據
NSString *sql=[NSString stringWithFormat:@"insert into t_Student(name,age,addr)values(%@,%@,'%@');",_nameTF.text,_ageTF.text,_addreeTF.text];
char *errorMesg=NULL;
int result=sqlite3_exec(db,sql.UTF8String,NULL,NULL,&errorMesg);
if (result==SQLITE_OK) {
NSLog(@"添加成功");
}
else
{
NSLog(@"添加失敗%s",errorMesg);
}
查詢數據
const char *sql = "select * from t_Student;";
// 2.定義一個stmt存放結果集
sqlite3_stmt *stmt = NULL;
// 3.檢測SQL語句的合法性
int result = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (result == SQLITE_OK) {
NSLog(@"查詢語句是合法的");
sqlite3_bind_text(stmt,1,"student",-1,NULL);
while (sqlite3_step(stmt)==SQLITE_ROW) {
int sid=sqlite3_column_int(stmt,0);
const unsigned char *sname=sqlite3_column_text(stmt,1);
int sage=sqlite3_column_int(stmt,2);
NSLog(@"%d,%s,%d",sid,sname,sage);
}
}
else
{
NSLog(@"查詢語句不合法");
}
Demo地址為:點擊進入下載
Navicat Premium 內部集成了SQLite3可以很友好的進行數據的創建,增添、修改、刪除等操作。
下面介紹一下 Navicat Premium的用法(由於CSDN上傳附件不能超過60M需要Navicat Premium軟件的可以在下面給我留言,私下發給你)
1. 打開Navicat Premium 軟件
2. 點擊左上角選擇SQLite選項 ,在對話框上填寫數據庫名字選擇數據類型、數據庫存放地址,如下圖:
點擊OK。
3.點擊main下的Tables,右擊選擇New Table創建一個表文件
注意:
id 設置為Key(唯一標示),並勾選了Auto increment自增長按鈕
age設置了默認值為20,如果不輸入數字就初始化為默認值
4.點擊按鈕後設置表的名字為t_Student
5.雙擊t_Student後點擊 +
號 添加幾組數據
可以觀察到我們不為id和age賦值的時候會有默認值
另外我們還可以用數據庫語句創建表和添加數據以及查詢數據
INSERT into t_Student(name,age,addree)VALUES('喬布斯',64,'蘋果公司')