SQLite是一款輕型的嵌入式數據庫
特點(優點)
它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了
它的處理速度比Mysq數據庫都還快
一、步驟
1.創建路徑 ???
//查找路徑下的文件夾
//第一個參數文件夾的名字
//第二個參數主目錄下的文件夾
NSArray*paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
//paths[0]表示只有到那個文件夾的路徑,沒有/,如果需要在這個文件夾添加路徑的話,就需要/+文件名
建立路徑,因為前面的是對文件夾的查找,所以這里在創建數據庫的路徑的時候需要帶上/+文件名
NSString* dbPath = [(NSString*)paths[0]stringByAppendingString:@"/chaoge.db"];
2.創建數據庫
類方法創建對象
_db= [FMDatabasedatabaseWithPath:dbPath];
init方法創建對象
_db= [[FMDatabasealloc]initWithPath:dbPath];
創建表格
//要創建數據庫,一定要調open方法,永遠不要調close方法,否則就沒有權限管理數據庫了
if([_dbopen])
{
//第一次創建成功
NSLog(@"success");
//開始創建表格
//如果student表不存在就創建一個student表create table if not exsits student
//()里面的就是我們要設置的字段,第一個字段PRIMARY KEY表示主鍵,只能是integer類型的,從0開始增加,后面的字段是我們需要設置的屬性,128 表示字節長度
BOOLisFinish = [_dbexecuteUpdate:
@"create table if not exists student (record_id ipjklnteger PRIMARY KEY, name varchar(128), score varchar(128))"];
if(isFinish)
{
NSLog(@"打開成功");
}
else
{
NSLog(@"打開失敗");
}
}
else
{
NSLog(@"fail");
}
3.增加數據
@"insert into student (name, score) values(?, ?)"
BOOLisInsert = [_dbexecuteUpdate:@"insert into student (name, score) values(?, ?)", nameStr, score];
if(isInsert)
{
NSLog(@"插入成功");
}
else
{
NSLog(@"插入失敗");
}
4.查找數據
按條件查找
@"select *from student where name = ?", nameStr
FMResultSet*set = [_dbexecuteQuery:@"select *from student where name = ?", nameStr];
while([setnext])
{
NSLog(@"%@ -- %@ -- %d", nameStr, [setstringForColumn:@"score"], [setintForColumn:@"record_id"]);
}
全部查找
@"select * from student"
FMResultSet*set = [_dbexecuteQuery:@"select * from student"];
while([setnext])
{
intrecord_id = [setintForColumn:@"record_id"];
NSString*name = [setstringForColumn:@"name"];
NSString*score = [setstringForColumn:@"score"];
NSLog(@"學生:%@,成績:%@, ID:%d", name, score, record_id);
}
小結:
[set next]: 的語法和枚舉器的語法類似,我們都是挨個查找,知道指針指向最后一個空的時候結束
[setstringForColumn:@"score”]: 如果前面需要用string接收就用stringForColumn,也就是說前面是什么類型,后面就用什么類型的去set
正序查找LIMIT
@"select *from student order by record_id LIMIT 1, 4"
FMResultSet*set = [_dbexecuteQuery:@"select *from student order by record_id LIMIT 1, 4"];
while([setnext])
{
NSLog(@"%@ -- %@ -- %d", [setstringForColumn:@"name"], [setstringForColumn:@"score"], [setintForColumn:@"record_id"]);
}
倒敘查找 DESC LIMIT
//這里的2是從最后一位開始的
FMResultSet*set = [_dbexecuteQuery:@"select * from student order by record_id DESC LIMIT 2, 4"];
while([setnext])
{
NSLog(@"%@ -- %@ -- %d", [setstringForColumn:@"name"], [setstringForColumn:@"score"], [setintForColumn:@"record_id"]);
}
5.刪除數據
按條件刪除
@"delete from student where name = ? and record_id = ?", nameStr,@2
BOOLisDelete = [_dbexecuteUpdate:@"delete from student where name = ? and record_id = ?", nameStr,@2];//轉成對象
if(isDelete)
{
NSLog(@"刪除成功");
}
else
{
NSLog(@"刪除失敗");
}
刪除全部
@"delete from student"
BOOLisDelete = [_dbexecuteUpdate:@"delete from student"];
if(isDelete)
{
NSLog(@"全部刪除");
}
else
{
NSLog(@"全部刪除失敗");
}
總結:
1.增加和刪除會改變數據庫的數據,所以會調用 excuteUpdate
但是查找不會改變數據庫的數據,所以會調用 excuteQuery