在 Core Data 应用中使用原生 SQL 功能
2011-02-09 17:15
260 查看
苹果在iPhone 3.0以后的sdk中提供了Core Data功能,对于普通的数据库应用开发来说,大大提高了方便性。
新建Window Base Application的时候,选上下面的使用Core Data,模板就自动创建好了,在delegate文件里提供了使用Core Data存取数据的所有方法,在其它View Controller里面只要调用delegate里面的方法就可以了。而修改Data Model并基于该Model创建Entity定义也提供了可视化的操作,一旦定义了实例,只要在程序中new一个实例,给变量赋值,然后调用 delegate中的save方法就可以添加一条新的记录了。这种方法对于长文本和时间等sql中比较难处理的字段尤其好用。而且在已保存的记录中取列表等操作也非常方便。(具体可以参考apple提供的Core Data入门教程)。
但是后来当我需要做汇总功能的时候,就完全傻掉了,虽然Core Data也提供了简单的sum, avg等运算,但是对于ralationship下的sum却完全找不到文档,甚至论坛上也搜不到解决方案。难道要我取出list再一个个手动汇总?这样数据量多的时候效率低的不是一点。当然,这时候如果能直接使用sql语句来汇总,那就最简单不过了。可是,Core Data封装的很完整,都不知道它把数据存到哪里去了,怎么办?难道要用sqlite重写整个程序,那已有添加和明细等功能就要做相当大的无谓的改动了。
今天终于找到了解决方案:Core Data本身就是基于sqlite的封装,所以它的底层仍然是使用sqlite进行存储数据的,而它使用的数据库,就在delegate文件中。通常是程序的Documents目录下的以程序名为名字的sqlite文件。如果程序已经在模拟器中运行过,只要进入用户目录下的 Library/Application Support/iPhone Simulator/User/Applications/,这里是你所有模拟器中运行过的程序,找到你需要的那个,进去以后进入Documents目录,里面就是自动生成的sqlite数据库文件。把它复制出来,用sqlite3命令直接查看数据库结构就可以了。
默认情况下生成的数据表的名字就是你的Entity的名字,加上字母Z开头,字段名也就是你定义的实例名字,同样加上字母Z开头,而主键就是个自增长的int型。有了这个数据库结构,在程序中添加libsqlite3.0.dylib的framework,然后就可以在程序中使用原生 sqlite3功能了。
有了方便的core data解决简单的数据操作,再配合完全自定义的sqlite功能,现在可以随心所欲的开发强大的数据库应用了
转自 http://dev.yesky.com/235/11107735.shtml
新建Window Base Application的时候,选上下面的使用Core Data,模板就自动创建好了,在delegate文件里提供了使用Core Data存取数据的所有方法,在其它View Controller里面只要调用delegate里面的方法就可以了。而修改Data Model并基于该Model创建Entity定义也提供了可视化的操作,一旦定义了实例,只要在程序中new一个实例,给变量赋值,然后调用 delegate中的save方法就可以添加一条新的记录了。这种方法对于长文本和时间等sql中比较难处理的字段尤其好用。而且在已保存的记录中取列表等操作也非常方便。(具体可以参考apple提供的Core Data入门教程)。
但是后来当我需要做汇总功能的时候,就完全傻掉了,虽然Core Data也提供了简单的sum, avg等运算,但是对于ralationship下的sum却完全找不到文档,甚至论坛上也搜不到解决方案。难道要我取出list再一个个手动汇总?这样数据量多的时候效率低的不是一点。当然,这时候如果能直接使用sql语句来汇总,那就最简单不过了。可是,Core Data封装的很完整,都不知道它把数据存到哪里去了,怎么办?难道要用sqlite重写整个程序,那已有添加和明细等功能就要做相当大的无谓的改动了。
今天终于找到了解决方案:Core Data本身就是基于sqlite的封装,所以它的底层仍然是使用sqlite进行存储数据的,而它使用的数据库,就在delegate文件中。通常是程序的Documents目录下的以程序名为名字的sqlite文件。如果程序已经在模拟器中运行过,只要进入用户目录下的 Library/Application Support/iPhone Simulator/User/Applications/,这里是你所有模拟器中运行过的程序,找到你需要的那个,进去以后进入Documents目录,里面就是自动生成的sqlite数据库文件。把它复制出来,用sqlite3命令直接查看数据库结构就可以了。
默认情况下生成的数据表的名字就是你的Entity的名字,加上字母Z开头,字段名也就是你定义的实例名字,同样加上字母Z开头,而主键就是个自增长的int型。有了这个数据库结构,在程序中添加libsqlite3.0.dylib的framework,然后就可以在程序中使用原生 sqlite3功能了。
有了方便的core data解决简单的数据操作,再配合完全自定义的sqlite功能,现在可以随心所欲的开发强大的数据库应用了
转自 http://dev.yesky.com/235/11107735.shtml
相关文章推荐
- 在 Core Data 应用中使用原生 SQL 功能
- [转]iPhone:在Core Data应用中使用原生Sql功能(天极网)
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- 简单修改Hibernate源码,增加使用原生SQL查询时动态addEntity和addScalar功能
- 简单修改Hibernate源码,增加使用原生SQL查询时动态addEntity和addScalar功能
- 使用 Sql 2005 中集成CLR功能开发基于C#的应用
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- 在Web微信应用中使用博客园RSS以及Quartz.NET实现博客文章内容的定期推送功能
- 使用线控耳机来操控应用功能
- Hibernate使用原生SQL语句
- Hibernate使用原生sql语句
- hibernate 原生sql的使用
- Django使用原生的SQL进行查询
- Android 原生应用使用@hide api
- Hibernate原生SQL查询使用addScalar()或addEntity()
- mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)
- 使用UIWindow实现iOS应用屏保功能
- Laravel使用构建器来生成原生sql语句来对总和排序
- 使用UItableview在iOS应用开发中实现好友列表功能
- 使用Win8自带的增强控制功能让用户只能打开指定网站/应用/游戏