CoreData数据库搭建
1.首先创建父类吧重用的代码写在里边
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h> @interface DBCenter : NSObject @property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, strong) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator; - (NSURL *) modelURL; //need to be overwrite
- (NSURL *) storeURL; //need to be overwrite
- (NSString *) storeDirectoryPath;
- (NSString *) entityName;
- (void) saveContext; @end
#import "DBCenter.h"
@interface DBCenter ()
@end
@implementation DBCenter
- (NSManagedObjectModel *)managedObjectModel {
// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
// NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"Resources" withExtension:@"bundle"]];
// NSURL *modelURL = [bundle URLForResource:@"LECPlayerDataModel" withExtension:@"momd"];
NSURL *modelURL = [self modelURL];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
// The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it.
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
// Create the coordinator and store
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSURL *storeURL = [self storeURL];
NSError *error = nil;
NSString *failureReason = @"There was an error creating or loading the application's saved data.";
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
// Report any error we got.
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application's saved data";
dict[NSLocalizedFailureReasonErrorKey] = failureReason;
dict[NSUnderlyingErrorKey] = error;
error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code: userInfo:dict];
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
- (NSManagedObjectContext *)managedObjectContext {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
return nil;
}
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
return _managedObjectContext;
}
#pragma mark -
- (NSURL *) modelURL {
return nil;
}
- (NSURL *) storeURL {
return nil;
}
- (NSString *) storeDirectoryPath {
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *dbDirectory = [documentDirectory stringByAppendingPathComponent:@"DB"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:dbDirectory]) {
[fileManager createDirectoryAtPath:dbDirectory
withIntermediateDirectories:YES
attributes:nil
error:nil];
}
return dbDirectory;
}
- (NSString *) entityName {
return nil;
}
- (void)saveContext {
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
NSError *error = nil;
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
@end
2.然后对于某一个存储模块独立出来继承
@interface DBCenterNewsExtend : DBCenter + (DBCenterNewsExtend *) sharedNewsDBCenter; /*启动广告*/
- (LaunchingAdItemModel *) launchingAdItem;
- (void) fullFillLaunchingAdItemModelWithLaunchingAdItem:(LaunchingAdItem *) launchingAdItem;
- (void) saveLaunchingAdItemDataModel;
- (void) removeLaunchingAdItem; /*新闻阅读记录*/
- (BOOL) hasReadWithNewsId:(NSString *) newsId;
- (void) addReadRecordWithNewsId:(NSString *) newsId; /*新闻收藏记录*/
- (BOOL) hasFavoriteWithNewsId:(NSString *) newsId;
- (void) addFavoriteRecordWithNewsDisplayItem:(NewsDisplayItem *) newsDisplayItem;
- (void) removeFavoriteRecordWithNewsId:(NSString *) newsId;
- (NSArray *) favoriteNewsList; //NSArray<NewsParamItem> /*搜索关键字列表*/
- (void) addSearchKeywordRecord:(NSString *) keyword;
- (NSArray *) keywordsList; //NSArray<NewsSearchKeywordModel>
- (void) cleanKeywordsList; @end
@interface DBCenterNewsExtend () @property (nonatomic, strong) LaunchingAdItemModel *launchingAdItemModel;
@property (nonatomic, strong) NSMutableArray *mNewsReadRecordsList;
@property (nonatomic, strong) NSMutableArray *mNewsDisplayModelList;
@property (nonatomic, strong) NSMutableArray *mNewsDisplayItemList;
@property (nonatomic, strong) NSMutableArray *mSearchKeywordsList; - (void) loadLaunchingAdItemModel;
- (NSString *) launchingAdEntityName; - (void) loadReadRecordsList;
- (NSString *) newsReadRecordEntityName;
- (NewsReadRecordItemModel *) newsReadRecordItemModelWithNewsId:(NSString *) newsId; - (void) loadFavoriteRecordsList;
- (NSString *) newsDisplayItemEntityName;
- (NewsDisplayItem *) newsDisplayItemFromNewsDisplayDataModel:(NewsDisplayItemDataModel *) newsDisplayItemDataModel;
- (NewsDisplayItemDataModel *) insertNewsDisplayItemDataModelFromNewsDisplayItem:(NewsDisplayItem *) newsDisplayItem;
- (NewsDisplayItem *) newsDisplayItemWithNewsId:(NSString *) newsId;
- (NewsDisplayItemDataModel *) newsDisplayItemDataModelWithNewsId:(NSString *) newsId; - (void) loadSearchKeywordsList;
- (NSString *) searchKeywordEntityName;
- (NewsSearchKeywordModel *) searchDataModelWithKeyword:(NSString *) keyword; @end @implementation DBCenterNewsExtend - (id) init {
if (self = [super init]) {
[self loadLaunchingAdItemModel];
[self loadReadRecordsList];
[self loadFavoriteRecordsList];
[self loadSearchKeywordsList];
}
return self;
} #pragma mark -
#pragma mark Overwrite
- (NSURL *) modelURL {
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"NewsModel" ofType:@"momd"];
NSURL *modelURL = [NSURL URLWithString:modelPath];
return modelURL;
} - (NSURL *) storeURL {
NSString *directoryPath = [self storeDirectoryPath];
NSString *storePath = [directoryPath stringByAppendingPathComponent:@"NewsModel.sqlite"];
return [NSURL fileURLWithPath:storePath];
} #pragma mark -
#pragma mark Public Methods
+ (DBCenterNewsExtend *) sharedNewsDBCenter {
static DBCenterNewsExtend *newsDBCenter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
newsDBCenter = [[DBCenterNewsExtend alloc] init];
});
return newsDBCenter;
} - (LaunchingAdItemModel *) launchingAdItem {
return _launchingAdItemModel;
} - (void) fullFillLaunchingAdItemModelWithLaunchingAdItem:(LaunchingAdItem *) launchingAdItem {
if (!_launchingAdItemModel) {
_launchingAdItemModel = [NSEntityDescription insertNewObjectForEntityForName:[self launchingAdEntityName] inManagedObjectContext:self.managedObjectContext];
[self saveContext];
}
_launchingAdItemModel.adId = launchingAdItem.adId;
_launchingAdItemModel.adTitle = launchingAdItem.adTitle;
_launchingAdItemModel.adImgUrl = launchingAdItem.adImgUrl;
_launchingAdItemModel.adWebUrl = launchingAdItem.adWebUrl;
_launchingAdItemModel.adEndTime = launchingAdItem.adEndTime;
[self saveContext];
} - (void) saveLaunchingAdItemDataModel {
[self saveContext];
} - (void) removeLaunchingAdItem {
[[self managedObjectContext] deleteObject:_launchingAdItemModel];
_launchingAdItemModel = nil;
} - (BOOL) hasReadWithNewsId:(NSString *) newsId {
bool hasRead = NO;
if ([self newsReadRecordItemModelWithNewsId:newsId]) {
hasRead = YES;
}
return hasRead;
} - (void) addReadRecordWithNewsId:(NSString *) newsId {
if (![self newsReadRecordItemModelWithNewsId:newsId]) { NewsReadRecordItemModel *newsReadRecordItemModel = [NSEntityDescription insertNewObjectForEntityForName:[self newsReadRecordEntityName] inManagedObjectContext:self.managedObjectContext];
newsReadRecordItemModel.newsId = newsId;
[_mNewsReadRecordsList addObject:newsReadRecordItemModel];
[self saveContext];
}
} /*新闻收藏记录*/
- (BOOL) hasFavoriteWithNewsId:(NSString *) newsId {
for (NewsDisplayItem *newsDisplayItem in _mNewsDisplayItemList) {
if (newsDisplayItem.newsDisplayParamItemList.count > ) {
NewsDisplayParamItem *displayParamItem = newsDisplayItem.newsDisplayParamItemList[];
if ([displayParamItem.newsId isEqualToString:newsId]) {
return YES;
}
}
}
return NO;
} - (void) addFavoriteRecordWithNewsDisplayItem:(NewsDisplayItem *) newsDisplayItem {
NewsDisplayParamItem *newsDisplayParamItem;
if (newsDisplayItem.newsDisplayParamItemList.count > ) {
newsDisplayParamItem = newsDisplayItem.newsDisplayParamItemList[];
}
NSString *newsId = newsDisplayParamItem.newsId;
if (![self hasFavoriteWithNewsId:newsId]) {
[self insertNewsDisplayItemDataModelFromNewsDisplayItem:newsDisplayItem];
}
} - (void) removeFavoriteRecordWithNewsId:(NSString *) newsId {
NewsDisplayItemDataModel *newsDisplayItemDataModel = [self newsDisplayItemDataModelWithNewsId:newsId];
if (newsDisplayItemDataModel) {
[[self managedObjectContext] deleteObject:newsDisplayItemDataModel];
[self saveContext];
} NewsDisplayItem *newsDisplayItem = [self newsDisplayItemWithNewsId:newsId];
if (newsDisplayItem) {
[_mNewsDisplayItemList removeObject:newsDisplayItem];
}
} - (NSArray *) favoriteNewsList {
return _mNewsDisplayItemList;
} /*搜索关键字列表*/
- (void) addSearchKeywordRecord:(NSString *) keyword {
if (![self searchDataModelWithKeyword:keyword]) {
NewsSearchKeywordModel *newsSearchKeywordModel = [NSEntityDescription insertNewObjectForEntityForName:[self searchKeywordEntityName] inManagedObjectContext:self.managedObjectContext];
newsSearchKeywordModel.keyword = keyword;
[_mSearchKeywordsList addObject:newsSearchKeywordModel];
[self saveContext];
}
} - (NSArray *) keywordsList {
NSMutableArray *mKeywordList = [[NSMutableArray alloc] init];
for (NewsSearchKeywordModel *keywordModel in _mSearchKeywordsList) {
[mKeywordList addObject:keywordModel.keyword];
}
return mKeywordList;
} - (void) cleanKeywordsList {
for (NewsSearchKeywordModel *searchKeywordModel in _mSearchKeywordsList) {
[[self managedObjectContext] deleteObject:searchKeywordModel];
}
[_mSearchKeywordsList removeAllObjects];
[self saveContext];
} #pragma mark -
#pragma mark Public Methods
- (void) loadLaunchingAdItemModel {
NSFetchRequest* request=[[NSFetchRequest alloc] init];
NSEntityDescription* userItemDataModelDescription = [NSEntityDescription entityForName:[self launchingAdEntityName] inManagedObjectContext:self.managedObjectContext];
[request setEntity:userItemDataModelDescription];
NSArray* fetchResultList = [self.managedObjectContext executeFetchRequest:request error:nil];
if (fetchResultList.count > ) {
_launchingAdItemModel = fetchResultList[];
}
} - (NSString *) launchingAdEntityName {
return @"LaunchingAdItemModel";
} - (void) loadReadRecordsList {
NSFetchRequest* request=[[NSFetchRequest alloc] init];
NSEntityDescription* userItemDataModelDescription = [NSEntityDescription entityForName:[self newsReadRecordEntityName] inManagedObjectContext:self.managedObjectContext];
[request setEntity:userItemDataModelDescription];
NSArray* fetchResultList = [self.managedObjectContext executeFetchRequest:request error:nil];
_mNewsReadRecordsList = [NSMutableArray arrayWithArray:fetchResultList];
} - (NSString *) newsReadRecordEntityName {
return @"NewsReadRecordItemModel";
} - (NewsReadRecordItemModel *) newsReadRecordItemModelWithNewsId:(NSString *) newsId {
for (NewsReadRecordItemModel *newsReadRecordItemModel in _mNewsReadRecordsList) {
if ([newsReadRecordItemModel.newsId isEqualToString:newsId]) {
return newsReadRecordItemModel;
}
}
return nil;
} - (void) loadFavoriteRecordsList {
_mNewsDisplayModelList = [[NSMutableArray alloc] init];
_mNewsDisplayItemList = [[NSMutableArray alloc] init]; NSFetchRequest* request=[[NSFetchRequest alloc] init];
NSEntityDescription* userItemDataModelDescription = [NSEntityDescription entityForName:[self newsDisplayItemEntityName] inManagedObjectContext:self.managedObjectContext];
[request setEntity:userItemDataModelDescription];
NSArray* fetchResultList = [self.managedObjectContext executeFetchRequest:request error:nil];
_mNewsDisplayModelList = [NSMutableArray arrayWithArray:fetchResultList]; for (NewsDisplayItemDataModel *newsDisplayItemDataModel in _mNewsDisplayModelList) {
NewsDisplayItem *newsDisplayItem = [self newsDisplayItemFromNewsDisplayDataModel:newsDisplayItemDataModel];
[_mNewsDisplayItemList addObject:newsDisplayItem];
}
} - (NSString *) newsDisplayItemEntityName {
return @"NewsDisplayItemDataModel";
} - (NewsDisplayItem *) newsDisplayItemFromNewsDisplayDataModel:(NewsDisplayItemDataModel *) newsDisplayItemDataModel {
NewsDisplayItem *newsDisplayItem = [[NewsDisplayItem alloc] init];
newsDisplayItem.displayType = [newsDisplayItemDataModel.displayType integerValue];
newsDisplayItem.subscriptType = [newsDisplayItemDataModel.subscriptType integerValue]; NewsDisplayParamItem *newsDisplayParamItem = [[NewsDisplayParamItem alloc] init];
newsDisplayParamItem.newsId = newsDisplayItemDataModel.newsId;
newsDisplayParamItem.newsTitle = newsDisplayItemDataModel.newsTitle;
newsDisplayParamItem.newsBrief = newsDisplayItemDataModel.newsBrief;
newsDisplayParamItem.newsDetailType = [newsDisplayItemDataModel.newsDetailType integerValue];
newsDisplayParamItem.imagesList = [newsDisplayItemDataModel.newsImageList componentsSeparatedByString:@" "]; newsDisplayItem.newsDisplayParamItemList = @[newsDisplayParamItem]; return newsDisplayItem;
} - (NewsDisplayItemDataModel *) insertNewsDisplayItemDataModelFromNewsDisplayItem:(NewsDisplayItem *) newsDisplayItem {
NewsDisplayItemDataModel *newsDisplayItemDataModel = [NSEntityDescription insertNewObjectForEntityForName:[self newsDisplayItemEntityName] inManagedObjectContext:self.managedObjectContext];
newsDisplayItemDataModel.displayType = @(newsDisplayItem.displayType);
newsDisplayItemDataModel.subscriptType = @(newsDisplayItem.subscriptType); if (newsDisplayItem.newsDisplayParamItemList.count > ) {
NewsDisplayParamItem *newsDisplayParamItem = newsDisplayItem.newsDisplayParamItemList[]; newsDisplayItemDataModel.newsId = newsDisplayParamItem.newsId;
newsDisplayItemDataModel.newsBrief = newsDisplayParamItem.newsBrief;
newsDisplayItemDataModel.newsDetailType = @(newsDisplayParamItem.newsDetailType);
newsDisplayItemDataModel.newsTitle = newsDisplayParamItem.newsTitle; NSMutableString *newsImageListString = [[NSMutableString alloc] init];
for (int i = ; i < newsDisplayParamItem.imagesList.count; i++) {
NSString *imageUrl = newsDisplayParamItem.imagesList[i];
[newsImageListString appendString:imageUrl];
if (i < newsDisplayParamItem.imagesList.count - ) {
[newsImageListString appendString:@" "];
}
}
newsDisplayItemDataModel.newsImageList = newsImageListString;
} [_mNewsDisplayModelList addObject:newsDisplayItemDataModel];
[_mNewsDisplayItemList addObject:newsDisplayItem]; [self saveContext]; return newsDisplayItemDataModel;
} - (NewsDisplayItem *) newsDisplayItemWithNewsId:(NSString *) newsId {
for (NewsDisplayItem *newsDisplayItem in _mNewsDisplayItemList) {
if (newsDisplayItem.newsDisplayParamItemList.count > ) {
NewsDisplayParamItem *displayParamItem = newsDisplayItem.newsDisplayParamItemList[];
if ([displayParamItem.newsId isEqualToString:newsId]) {
return newsDisplayItem;
}
}
}
return nil;
} - (NewsDisplayItemDataModel *) newsDisplayItemDataModelWithNewsId:(NSString *) newsId {
for (NewsDisplayItemDataModel *newsDisplayItemDataModel in _mNewsDisplayModelList) {
if ([newsDisplayItemDataModel.newsId isEqualToString:newsId]) {
return newsDisplayItemDataModel;
}
}
return nil;
} - (void) loadSearchKeywordsList {
NSFetchRequest* request=[[NSFetchRequest alloc] init];
NSEntityDescription* keywordModelDescription = [NSEntityDescription entityForName:[self searchKeywordEntityName] inManagedObjectContext:self.managedObjectContext];
[request setEntity:keywordModelDescription];
NSArray* fetchResultList = [self.managedObjectContext executeFetchRequest:request error:nil];
_mSearchKeywordsList = [NSMutableArray arrayWithArray:fetchResultList];
} - (NSString *) searchKeywordEntityName {
return @"NewsSearchKeywordModel";
} - (NewsSearchKeywordModel *) searchDataModelWithKeyword:(NSString *) keyword {
for (NewsSearchKeywordModel *newsSearchKeywordModel in _mSearchKeywordsList) {
if ([newsSearchKeywordModel.keyword isEqualToString:keyword]) {
return newsSearchKeywordModel;
}
}
return nil;
} @end
CoreData数据库搭建的更多相关文章
- iOS - CoreData 数据库存储
1.CoreData 数据库 CoreData 是 iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用 CoreData 框架,程序员可以很轻松有效地通过面向对象的接 ...
- CoreData数据库
一 CoreData 了解 1 CoreData 数据持久化框架是 Cocoa API 的一部分,首先在iOSS5 版本的系统中出现: 它允许按照 实体-属性-值 模式组织数据: ...
- CoreData数据库迁移的操作
CoreData数据库迁移操作步骤,操作是基于Xcode7. 1.添加新的数据库.选中当前数据库版本:Editor->Add Model Verson,创建一个新的数据库版本. 2.Comman ...
- iOS coredata 数据库升级 时报Can't find model for source store
在coredata 数据库结构被更改后,没根据要求立即建立新version,而是在原version上进行了小修改,之后才想起来建立新版本.并通过以下代码合并数据库, NSError *error = ...
- 【原】iOS学习之SQLite和CoreData数据库的比较
1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...
- 服务器数据库搭建流程(CentOs+mysql)
前言: 服务器上数据库搭建需要知道Linux系统的版本,以前的Ubuntu14.04直接在终端下输入apt-get install (package)便可方便的下载并安装mysql,但是在centOs ...
- CoreData数据库升级
如果IOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表.字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下: 1.选中你的mydata.xc ...
- iOS:CoreData数据库的使用四(数据库和UITableViewController以及NSFetchedResultsController一起使用)
CoreData数据库虽然可以和tableview或者UITableViewController一起使用将数据显示在表格上,但是在准备数据的时候,这种方式需要用一个可变数组来装从数据库一次性取出来的所 ...
- iOS:CoreData数据库的使用三(数据库和tableView表格一起使用)
CoreData数据库是用来持久性存储数据的,那么,我们再从该数据库中取出数据干什么呢?明显的是为了对数据做操作,这个过程中可以将它们直观的显示出来,即通过表格的形式显示出来.CoreData配合ta ...
随机推荐
- Linux中fdisk分区
一.硬盘接口 从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而SAS只在高端服 ...
- 以聚合数据免费接口为例,通过 Class 类继承方法,让小程序实现项目化接口调用
微信小程序数据来源,是通过接口实现的.但接口如何调,数据如何取?每个人都有不同的方法,下面以聚合数据免费接口为例. 配置接口 config.js 聚合数据请求接口需要以key作为参数. const c ...
- Python—函数进阶篇
lambda表达式(匿名函数表达式) 作用:创建一个匿名函数对象.同def类似,但不提供函数名. 语法:lambda [形参1,形参2,...] : 表达式 语法说明 lambda 只是一个表达式,它 ...
- 爬虫scrapy模块
首先下载scrapy模块 这里有惊喜 https://www.cnblogs.com/bobo-zhang/p/10068997.html 创建一个scrapy文件 首先在终端找到一个文件夹 输入 s ...
- (转)深入浅出JWT(JSON Web token)
转载地址:https://www.cnblogs.com/mantoudev/p/8994341.html 参考地址:https://baijiahao.baidu.com/s?id=16080218 ...
- (转)idea创建Maven项目时Maven插件内看不到mybatis-generator
转载地址:https://blog.csdn.net/yytwiligt/article/details/81010360 创建Maven项目时插件配置添加了mybatis-generator但是右侧 ...
- 用背包问题思路解决 322. Coin Change(完全背包)
首先需要明白 0-1 背包问题中的放置表格,见 “玩转算法面试 从真题到思维全面提升算法思维” 9-5 节,本题思路类似表格纵向为:只考虑第 [0 …,… index] 种硬币(物品)表格横向为:需要 ...
- day70_10_16drf组件响应模块,异常模块和序列化模块。
一.解析模块 为什么要配置解析模块? 1)drf给我们通过了多种解析数据包方式的解析类. 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析. 3)全局配置就是针对每一个视图 ...
- 2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法
一.SQL中的语法 1.drop table 表名称 eg: drop table dbo.Sys_Test 2.truncate table 表 ...
- 牛客小白月赛18 Forsaken喜欢数论
牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题 Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ...