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
网友评论