sql – 使用FMDB获取复杂数据
发布时间:2020-05-24 08:55:51 所属栏目:MsSql 来源:互联网
导读:我在iOS应用程序中使用SQLite,我使用FMDB作为包装器.这是我的数据库架构: CREATE TABLE Offer (code TEXT PRIMARY KEY NOT NULL, name TEXT);CREATE TABLE OffreMarket (codeOffer TEXT NOT NULL,codeMarket TEXT NOT NULL,FOREIGN KEY(cod
|
我在iOS应用程序中使用SQLite,我使用FMDB作为包装器.这是我的数据库架构: CREATE TABLE Offer (code TEXT PRIMARY KEY NOT NULL,name TEXT); CREATE TABLE OffreMarket (codeOffer TEXT NOT NULL,codeMarket TEXT NOT NULL,FOREIGN KEY(codeOffer) REFERENCES Offer(code),FOREIGN KEY(codeMarket) REFERENCES Market(code)); CREATE TABLE Market (code TEXT PRIMARY KEY NOT NULL,name TEXT); 我的模型对象: @interface Offer : NSObject @property (nonatomic,copy) NSString *code; @property (nonatomic,copy) NSString *name; @property (nonatomic,copy) NSArray *markets; @end @interface OffreMarket : NSObject @property (nonatomic,copy) NSString *codeOffer; @property (nonatomic,copy) NSString *codeMarket; @end @interface Market : NSObject @property (nonatomic,copy) NSString *name; @end 例如,我正在获取数据库中的所有商品,如下所示: - (NSArray *)offers {
// Open database
NSMutableArray *offers = [NSMutableArray new];
FMResultSet *resultSet = [database executeQuery:@"SELECT * FROM Offer"];
while ([resultSet next]){
Offer *offer = [Offer new];
offer.code = [resultSet stringForKey:@"code"];
offer.name = [resultSet stringForKey:@"name"];
// Get the markets for each offer
FMResultSet *marketResultSet = [database executeQuery:@"SELECT * FROM OffreMarket WHERE codeOffer = ?",offer.code];
NSMutableArray *offers = [NSMutableArray new];
while ([marketResultSet next]) {
OffreMarket *offerMarket = [OffreMarket new];
....
[offers addObject:offerMarket];
}
market.offers = [offers copy];
}
return [offers copy]
}
这是有效的,但需要时间,因为我使用许多SQL请求来获取所有商品和相应的市场. 我可以避免许多SQL请求来获取相应市场的所有商品吗?谢谢你的回答 解决方法我可以建议的是:>优化您的SQL语句.您可以简单地将语句更改为“SELECT * FROM OffreMarket WHERE codeOffer IN(SELECT code FROM Offer)”,而不是2个循环.如果要在表“Offer”中使用列“name”,则可以连接两个表“codeOffer”和“Offer”.这里的经验法则是避免过多的循环,但尝试组合或优化您的SQL语句.>在表“Offer”中为列“code”创建索引.它会加快你的搜索速度.例如,在我的一个项目中,我必须处理具有36K记录的SQL表.通过将简单索引设置为主键列,我设法将该表上的搜索时间缩短了10秒. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- SUSE Linux下源码编译方式安装MySQL 5.6过程分享
- sql – HQL:是否可以在子查询上执行INNER JOIN?
- sql – 随着时间的推移查询DAU / MAU(每日)
- 疯狂的SQL问题:如何使用数据透视交叉应用?
- sql-server – 检查SQL Server 2005 XML字段是否
- SQl Express 2005的无声安装
- sql-server – 使用T-SQL,从字符串返回第n个分隔
- sql-server – 用于INSERT和UPDATE的SQL Server存
- sql-server – 锁定SQL Server数据库
- sql – SELECT查询是否始终以相同的顺序返回行?
热点阅读
