美文网首页
对数据库的操作

对数据库的操作

作者: 卟吃兎孒的罗卜 | 来源:发表于2017-05-19 01:52 被阅读0次

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

相关文章

网友评论

      本文标题:对数据库的操作

      本文链接:https://www.haomeiwen.com/subject/mpbexxtx.html