热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

fmdb(FMDatabase)数据库总结

这段时间公司在做一个新的应用,用到了数据库。在网上找了一些资料,最后决定用fmdb来做。主要是用起来比较简单,适合刚接触数据库这方面的人。一、步首先是创建数据库:(NSString*)filePath:(NSString*)fileName{NSString*pathNSHomeDirectory();

这段时间公司在做一个新的应用,用到了数据库。在网上找了一些资料,最后决定用fmdb来做。主要是用起来比较简单,适合刚接触数据库这方面的人。 一、步 首先是创建数据库: (NSString*)filePath:(NSString *)fileName { NSString *path=NSHomeDirectory(); /

这段时间公司在做一个新的应用,用到了数据库。在网上找了一些资料,最后决定用fmdb来做。主要是用起来比较简单,适合刚接触数据库这方面的人。

一、步 首先是创建数据库:

+(NSString*)filePath:(NSString *)fileName
{

NSString *path=NSHomeDirectory();


//拼接路径Library/Caches
path=[path stringByAppendingPathComponent:@"Library/Caches"];
NSLog(@"path=%@",path);
NSFileManager *fm=[NSFileManager defaultManager];
//检查指定的缓存目录是否存在
if ([fm fileExistsAtPath:path]) {
//检查要保存的文件名是否合法
if (fileName&& [fileName length]!=0) {
//拼接全路径
path=[path stringByAppendingPathComponent:fileName];
}
}
else{
NSLog(@"缓存目录不存在");
}
return path;
}


-(id)init
{

DataItem *item = [[DataItem alloc] init];
NSLog(@"090909090==%@",item.destination);
if (self=[super init]) {
//实例化第三方数据库操作类对象
//如果user.db文件不存在就创建新的
//存在就直接使用
fmdb=[[FMDatabase databaseWithPath:[Database filePath:@"user.db"]] retain];
//尝试打开数据库
if ([fmdb open]) {
//创建数据表
[self createTable];
}
}
return self;
}

二、 创建数据库表 需要建多个表所以用一个数组来保存建表语句,然后遍历数组执行建表语句


NSArray *reportinfoArray = [NSArray arrayWithObjects:@"CREATE TABLE IF NOT EXISTS report_info (report_id integer Primary Key Autoincrement,report_name Varchar(1024) DEFAULT NULL,user_id integer DEFAULT NULL“,nil];

以report_id为自增长的主建 在建表语句中将其声明为主建,在表的插入过程中 repord_id回从1开始自动增长不需要对其进行赋值。

for (NSString *sql in reportinfoArray) {
//执行sql语句
//创建表,增,删,改都用这个方法
if ([fmdb executeUpdate:sql]) {
NSLog(@"已创建");

}
else{
NSLog(@"创建表失败:%@",[fmdb lastErrorMessage]);;
}
}


三,插入 可一条一条插入也可批量插入

-(void)insertItem:(DataItem *)item
{
if ([self existsItem:item]) {
return;
}else{


NSString *sql=[NSString stringWithFormat:@"insert into report_info (report_name,user_id,any_invoice,allowance,advance_payment,report_aim,report_starttime,report_endtime,destination) values (?,?,?,?,?,?,?,?,?)"];
//变参方法,每个?号代表一个字段值,所有参数必须为对象类类型
if (sql) {
[fmdb executeUpdate:sql,item.report_name,item.user_id,item.any_invoice,item.allowance,item.advance_payment,item.report_aim,item.report_starttime,item.report_endtime,item.destination];
//获取最后一个插入的数据的主键
markID = [fmdb lastInsertRowId];
}
else{
NSLog(@"插入失败 :%@",[fmdb lastErrorMessage]);
}


}
}
批量插入
-(void)insertStayArray:(NSArray *)array
{
//开始批量操作
[fmdb beginTransaction];
for (DataItem *item in array) {
[self insertStayItem:item];
}
//提交所有修改
[fmdb commit];
}

注释:在插入过程中遇到了一个问题 再插入nsinteger 类型的数据的时候 程序会崩溃 后来的解决办法是[NSString stringWithFormat:@"%d",item.report_id] 将其转化为nsstring 类

型在进行插入。

四、删除相对简单 只需要根据其主键后按照某些特定条件进行删除

-(void)deletestay_info:(int)stay_id
{
NSString*delete=[NSString stringWithFormat:@"DELETE FROM stay_info WHERE stay_id = %d",stay_id];
BOOL a=[fmdb executeUpdate:delete];
if (a) {
NSLog(@"%d,删除成功!",stay_id);
}
}



五、查找 也是根据某些特定的条件进行查找

-(DataItem*)getStay_info:(int)stay_id
{

NSString *sql=[NSString stringWithFormat:@"select * from stay_info where stay_id=%d",stay_id];


//执行查询
FMResultSet *rs=[fmdb executeQuery:sql];
//如果有记录
DataItem *item=[[[DataItem alloc] init] autorelease];

while ([rs next]) {
//此方法是一组方法
//根据字段类型选择不同方法
item.stay_id = [rs longForColumn:@"stay_id"];
item.stay_endtime = [rs stringForColumn:@"stay_endtime"];
item.stay_company_pay = [rs stringForColumn:@"stay_company_pay"];
}

return item;

}


六、修改 根据要修改的内容判断满足怎样的条件需要修改


-(void)alerttraffic_info:(DataItem *)item
{
NSLog(@"traffic_destination = %@",item.traffic_destination);

NSLog(@"traffic_id=%d",item.traffic_id);
NSString*Name=[NSString stringWithFormat:@"UPDATE traffic_info SET traffic_kind = '%@' WHERE traffic_id = %d",item.traffic_kind,item.traffic_id];
[fmdb executeUpdate:Name];

NSString*trafficDate=[NSString stringWithFormat:@"UPDATE traffic_info SET traffic_date = '%@' WHERE traffic_id = %d",item.traffic_date,item.traffic_id];
[fmdb executeUpdate:trafficDate];

}

推荐阅读
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 使用SQL命令创建数据库及其语句解析
    使用 `CREATE DATABASE` 命令可以创建一个新的数据库,并指定其名称。该 SQL 语句用于初始化数据库结构,执行后将生成一个新的数据库实例,用于存储相关的数据对象和表。在本例中,通过执行 `CREATE DATABASE 课程管理1`,系统将创建一个名为“课程管理1”的数据库,以便后续的数据管理和操作。 ... [详细]
  • 如何高效地安装并配置 PostgreSQL 数据库系统?本文将详细介绍从下载到安装、配置环境变量、初始化数据库、以及优化性能的全过程,帮助读者快速掌握 PostgreSQL 的核心操作与最佳实践。文章还涵盖了常见问题的解决方案,确保用户在部署过程中能够顺利解决遇到的各种挑战。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 二十六、Java开发实战:PL/SQL轻松实现远程数据库连接
    通过 PL/SQL Developer 实现远程数据库连接的详细步骤如下:首先启动 PL/SQL Developer 软件,然后在登录界面中准确输入用户名和密码;接着在数据库连接配置中,按照 IP:Port/SID 的格式填写目标数据库的地址信息。此外,确保网络环境畅通无阻,并检查防火墙设置以避免连接失败。 ... [详细]
  • 在Node.js中调用MySQL存储过程`updateUser(p1, p2, @p3)`时,其中`@p3`为输出参数。若更新操作失败,则返回0;成功则返回1。本文将详细介绍如何正确获取存储过程的返回结果,并确保在实际应用中能够顺利执行。 ... [详细]
  • 深入解析数据库中的存储过程与触发器技术
    本文深入探讨了数据库中的存储过程与触发器技术。存储过程是一组预编译的SQL语句,经过优化后存储在数据库服务器中,以提高执行效率。在大型数据库系统中,通过调用存储过程的名字,用户可以快速执行复杂的操作,从而提升系统的性能和响应速度。此外,触发器作为一种特殊的存储过程,能够在特定事件发生时自动执行,进一步增强了数据库的自动化管理和数据完整性。 ... [详细]
  • 深入解析MySQL中的回表查询与索引覆盖技术
    在MySQL中,回表查询与索引覆盖技术是优化查询性能的重要手段。回表查询是指当使用非聚集索引进行查询时,由于非聚集索引的B-Tree叶子节点中仅存储了对应行数据的主键值,因此需要通过主键再次访问聚簇索引来获取完整数据记录。而索引覆盖则是在查询所需的所有列都包含在某个索引中,从而避免了额外的回表操作,显著提高了查询效率。本文将深入探讨这两种技术的原理及其应用场景,帮助读者更好地理解和优化MySQL查询性能。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 本文详细探讨了MySQL数据库实例化参数的优化方法及其在实例查询中的应用。通过具体的源代码示例,介绍了如何高效地配置和查询MySQL实例,为开发者提供了有价值的参考和实践指导。 ... [详细]
author-avatar
江魂2010_717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有