返回顶部
首页 > 资讯 > 服务器 >IOS-MVC层读取服务器接口JSON数据
  • 340
分享到

IOS-MVC层读取服务器接口JSON数据

IOS服务器JSON数据 2022-06-04 01:06:29 340人浏览 八月长安
摘要

此篇文章主要讲述获取服务器JSON接口数据,以便大家在今后的物联网信息时代,移动数据肯定都是需要网络数据的,那么就需要用一个分布集中,整体化的,规范性的创建所需的文件,同时方便以后维

此篇文章主要讲述获取服务器JSON接口数据,以便大家在今后的物联网信息时代,移动数据肯定都是需要网络数据的,那么就需要用一个分布集中,整体化的,规范性的创建所需的文件,同时方便以后维护;

分别为:M(model),M(manager),V(view),C(cell),C(controller);

具体程序如下:

一:YSMasonryManager.h


#import <Foundation/Foundation.h>
#import "BaseManager.h"
#import "YSMasonryModel.h"


@protocol YSMasonryManagerDelegate <NSObject>

-(void)networkSuccess:(YSMasonryModel *_Nullable)result;

-(void)networkFail:(NSString *_Nullable)result;

@end

NS_ASSUME_NONNULL_BEGIN

@interface YSMasonryManager : BaseManager

@property(weak,nonatomic) id<YSMasonryManagerDelegate> delegate;

-(void)getDeviceProile:(NSString *)limit Offset:(NSString *)offset;

@end

NS_ASSUME_NONNULL_END

二:YSMasonryManager.m


#import "YSMasonryManager.h"

@implementation YSMasonryManager

-(void)getDeviceProile:(NSString *)limit Offset:(NSString *)offset{
  
  NSString *strUrl = [NSString stringWithFORMat:@"%@api/internal/profile",DEVICE_BASE_URL];
  
  //jsON 
  [PPNetworkHelper setRequestSerializer:PPRequestSerializerHttp];
  [PPNetworkHelper setResponseSerializer:PPResponseSerializerJSON];
  //配置Jwt文件
  [PPNetworkHelper setValue:USERJWTKEYS forHTTPHeaderField:@"grpc-Metadata-Authorization"];
  
  [PPNetworkHelper GET:strUrl parameters:@"" success:^(id responseObject){
    YSMasonryModel *net = [YSMasonryModel mj_objectWithKeyValues:responseObject];
    if(net.organizations.count>0){
      if([self.delegate respondsToSelector:@selector(networkSuccess:)]){
        [self.delegate networkSuccess:net];
      }
    }else{
      if([self.delegate respondsToSelector:@selector(networkFail:)]){
        [self.delegate networkFail:@"Get Fail!"];
      }
    }
    
  } failure:^(NSError *error){
    // NSError *newError = [NSError returnErrorWithError:error];
    if([self.delegate respondsToSelector:@selector(networkFail:)]){
      [self.delegate networkFail:@"cc"];
    }
  }];
}

@end

分析:


#import "BaseManager.h"//头部manager对象
#import "YSMasonryModel.h"//模型层

三:YSMasonryModel.h


#import <Foundation/Foundation.h>
#import "BaseModel.h"
#import "YSMasonryPileModel.h"

NS_ASSUME_NONNULL_BEGIN

@interface YSMasonryModel : BaseModel

@property(nonatomic, copy) NSString *settings;

@property(nonatomic, copy) NSArray *organizations;

@property(nonatomic, copy) NSString *user;



+(NSDictionary*)mj_objectClassInArray;

@end

NS_ASSUME_NONNULL_END

四:YSMasonryModel.m


#import "YSMasonryModel.h"

@implementation YSMasonryModel

+(NSDictionary*)mj_objectClassInArray{
  return @{@"organizations":[YSMasonryPileModel class],};
}

@end

五:YSMasonryPileModel.h


#import <Foundation/Foundation.h>
#import "BaseModel.h"

NS_ASSUME_NONNULL_BEGIN

@interface YSMasonryPileModel : BaseModel
@property(nonatomic,assign) NSString *isAdmin;
@property(nonatomic, copy) NSString *organizationID;
@property(nonatomic, copy) NSString *organizationName;
@property(nonatomic, copy) NSString *createdAt;
@property(nonatomic, copy) NSString *updatedAt;
@property(nonatomic,assign) NSString *disableAssignExistingUsers;
@property(nonatomic, copy) NSString *email;
@property(nonatomic, copy) NSString *uid;
@property(nonatomic,assign) NSString *isActive;
@property(nonatomic, copy) NSString *note;
@property(nonatomic,assign) NSString *sessionTTL;
@property(nonatomic, copy) NSString *username;

-(id)initWithDict:(NSDictionary*)dict;

@end

NS_ASSUME_NONNULL_END

六:YSMasonryPileModel.m


#import "YSMasonryPileModel.h"

@implementation YSMasonryPileModel


+ (NSDictionary *)mj_replacedKeyFromPropertyName
{
  return @{@"uid": @"uid"};
}

-(id)initWithDict:(NSDictionary*)dict{
  if(self = [super init]){
    self.createdAt = dict[@"createdAt"];
    //@"gatewayDiscoveryEnabled":@(enable),
    self.isAdmin = dict[@"isAdmin"];
    self.organizationID = dict[@"organizationID"];
    self.organizationName = dict[@"networkServerID"];
    self.updatedAt = dict[@"updatedAt"];
    
     self.disableAssignExistingUsers = dict[@"disableAssignExistingUsers"];
    
    self.email = dict[@"email"];
    self.uid = dict[@"id"];
    self.isActive = dict[@"isActive"];
    self.note = dict[@"note"];
    self.sessionTTL = dict[@"sessionTTL"];
    self.username = dict[@"username"];
  }
  return self;
}

@end

七:YSMasonryView.h


#import <UIKit/UIKit.h>
#import "BaseView.h"

NS_ASSUME_NONNULL_BEGIN

@interface YSMasonryView : BaseView

@property(nonatomic,strong) UITableView *mDevericePile;

@end

NS_ASSUME_NONNULL_END

八:YSMasonryView.m


#import <Foundation/Foundation.h>
#import "YSMasonryView.h"
#ifdef __OBJC__
//define this constant if you want to use Masonry without the 'mas_' prefix
#define MAS_SHORTHAND
//define this constant if you want to enable auto-boxing for default syntax
#define MAS_SHORTHAND_GLOBALS
#import "Masonry.h"
#endif

@implementation YSMasonryView

-(void)initView{
  
  _mDevericePile = [[UITableView alloc] init];
  _mDevericePile.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
  [self addSubview:_mDevericePile];
  
  [_mDevericePile makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self).offset(0);
    make.left.equalTo(self).offset(0);
    make.right.equalTo(self).offset(0);
    make.bottom.equalTo(self).offset(0);
  }];
}

@end

九:YSMasonryCell.h


#import <UIKit/UIKit.h>
#import "BaseCell.h"

NS_ASSUME_NONNULL_BEGIN

@interface YSMasonryCell : BaseCell
@property(nonatomic, strong) UIImageView *mNetImgVw;
@property(nonatomic, strong) UILabel *mNetNameLb;
@property(nonatomic, strong) UILabel *mNetServerLb;
@property(nonatomic, strong) UILabel *mNetTimeLb;

@end

NS_ASSUME_NONNULL_END

十:YSMasonryCell.m


#import "YSMasonryCell.h"

@implementation YSMasonryCell

- (void)awakeFromNib {
  [super awakeFromNib];
}


- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  if(self){
    UIView *mainView = [[UIView alloc] init];
    mainView.layer.cornerRadius = 8;
    mainView.layer.borderColor = [[UIColor grayColor] CGColor];
    mainView.layer.borderWidth = 1;
    [self addSubview:mainView];
    
    [mainView makeConstraints:^(MASConstraintMaker *make){
      make.left.equalTo(self).offset(10);
      make.right.equalTo(self).offset(-10);
      make.top.equalTo(self).offset(10);
      make.bottom.equalTo(self).offset(-10);
    }];
    
    _mNetImgVw = [[UIImageView alloc] init];
    [mainView addSubview:_mNetImgVw];
    
    [_mNetImgVw makeConstraints:^(MASConstraintMaker *make){
      make.centerY.equalTo(self);
      make.left.equalTo(self).offset(20);
      make.width.equalTo(@25);
      make.height.equalTo(@25);
    }];
    
    //Net名称
    _mNetNameLb = [[UILabel alloc] init];
    _mNetNameLb.textColor = [UIColor grayColor];
    _mNetNameLb.font = [UIFont fontWithName:@"Helvetica-Bold" size:16];
    _mNetNameLb.textAlignment = NSTextAlignmentLeft;
    [mainView addSubview:_mNetNameLb];
    
    [_mNetNameLb makeConstraints:^(MASConstraintMaker *make){
      make.top.equalTo(mainView).offset(5);
      make.left.equalTo(self.mNetImgVw).offset(35);
      make.right.equalTo(mainView).offset(-5);
      make.height.equalTo(@30);
    }];
    
    //创建时间
    _mNetTimeLb = [[UILabel alloc] init];
    _mNetTimeLb.textColor = [UIColor grayColor];
    _mNetTimeLb.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
    _mNetTimeLb.textAlignment = NSTextAlignmentRight;
    [mainView addSubview:_mNetTimeLb];
    
    [_mNetTimeLb makeConstraints:^(MASConstraintMaker *make){
      make.top.equalTo(mainView).offset(10);
      make.right.equalTo(mainView).offset(-10);
      make.width.equalTo(@160);
      make.height.equalTo(@30);
    }];
    
    //端口号
    _mNetServerLb = [[UILabel alloc] init];
    _mNetServerLb.textColor = [UIColor grayColor];
    _mNetServerLb.font = [UIFont fontWithName:@"Helvetica-Bold" size:16];
    _mNetServerLb.textAlignment = NSTextAlignmentLeft;
    [mainView addSubview:_mNetServerLb];
    
    [_mNetServerLb makeConstraints:^(MASConstraintMaker *make){
      make.bottom.equalTo(self).offset(-15);
      make.left.equalTo(self.mNetImgVw).offset(35);
      make.right.equalTo(mainView).offset(-10);
      make.height.equalTo(@30);
    }];
  }
  return self;
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  [super setSelected:selected animated:animated];
}

@end

十一:YSMasonryContller.h


#import <UIKit/UIKit.h>
#import "BaseViewController.h"
#import "YSMasonryView.h"
#import "YSMasonryCell.h"
#import "YSMasonryManager.h"
#import "YSMasonryPileModel.h"
#import "MBProgresshUD.h"
#import "MJRefresh.h"
#import "WHToast.h"


NS_ASSUME_NONNULL_BEGIN

@interface YSMasonryContller : BaseViewController

@property(nonatomic,strong) YSMasonryView *lgdView;

@property(nonatomic, strong) YSMasonryManager *lgdManager;

@property(strong, nonatomic) NSMutableArray *dataList;

@property (strong,nonatomic) MBProgressHUD *hud;

@property(nonatomic, strong) YSMasonryPileModel *model;

@property(nonatomic, strong) NSString *organizations;

@property(assign,nonatomic) int limit;

@property(assign,nonatomic) int offsert;

@end

NS_ASSUME_NONNULL_END

十二:YSMasonryContller.m


#import <Foundation/Foundation.h>
#import "YSMasonryContller.h"

#define CELLIDENTIFITER "NETTABLEVIEWCELL"

@interface YSMasonryContller()<YSMasonryManagerDelegate,UITableViewDataSource, UITableViewDelegate,UITextFieldDelegate>

@end

@implementation YSMasonryContller

- (void)viewDidLoad {
  [super viewDidLoad];
  [self initData];
  
}

//头部标题a
- (void)customContentView{
  UIColor *commonBlue = [self.commonUtil stringToColor:@"#333333"];
  [self.navigationController.navigationBar setBarTintColor:commonBlue];
  self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
  self.navigationItem.title = @"NetWork Server";
}

- (void)customNavigationLeftItem{
  UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
  self.navigationItem.backBarButtonItem = item;
}


-(void)customNavigationRightItem{
  UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithTitle:@"Add" style:UIBarButtonItemStylePlain target:self action:@selector(onAddClick)];
  add.tintColor = [UIColor whiteColor];
  self.navigationItem.rightBarButtonItem = add;
}



-(void)initData{
  UIView *view = [[UIView alloc] init];
  self.lgdView.mDevericePile.tableFooterView = view;
  
  self.lgdView.frame = self.view.bounds;
  [self.view addSubview:self.lgdView];
  
  _limit = 5;
  _offsert = 0;
  
}
//启动时的运行数据
- (void)viewDidAppear:(BOOL)animated{
  [super viewDidAppear:animated];
  //加载数据
  NSString *slimit = [NSString stringWithFormat:@"%d",_limit];
  NSString *soffset = [NSString stringWithFormat:@"%d",_offsert];
  [self.lgdManager getDeviceProile:slimit Offset:soffset];
}

-(YSMasonryView*)lgdView{
  if(_lgdView==nil){
    _lgdView = [[YSMasonryView alloc] init];
    _lgdView.mDevericePile.dataSource = (id)self;
    _lgdView.mDevericePile.delegate = (id)self;
  }
  return _lgdView;
}

-(YSMasonryManager*)lgdManager{
  if(_lgdManager==nil){
    _lgdManager = [[YSMasonryManager alloc] init];
    _lgdManager.delegate = (id)self;
  }
  return _lgdManager;
}

-(NSMutableArray*)dataList{
  if(_dataList==nil){
    _dataList = [NSMutableArray array];
  }
  return _dataList;
}

#pragma mark get network data

-(void)networkSuccess:(YSMasonryModel *_Nullable)result{
  [self.lgdView.mDevericePile.mj_header endRefreshing];
  [self.lgdView.mDevericePile.mj_footer endRefreshing];
  self.dataList = [NSMutableArray arrayWithArray:result.organizations];
  [self.lgdView.mDevericePile reloadData];

}


-(void)networkFail:(NSString *_Nullable)result{
  [self.lgdView.mDevericePile.mj_header endRefreshing];
  [self.lgdView.mDevericePile.mj_footer endRefreshing];
  [WHToast showMessage:result originY:500 duration:2 finishHandler:^{
  }];
}


#pragma mark tableView

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  return self.dataList.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  
  YSMasonryCell *cell = [tableView dequeueReusableCellWithIdentifier:@CELLIDENTIFITER];
  
  if(cell==nil){
    cell = [[YSMasonryCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@CELLIDENTIFITER];
  }
  
  if(_dataList.count>0){
    YSMasonryPileModel *model = [[YSMasonryPileModel alloc] initWithDict:[self.dataList objectAtIndex:indexPath.row]];
    if(model!=nil){
      //cell.mNetImgVw.image = [UIImage imageNamed:@"net"];
      // cell.mNetNameLb.text = model.isAdmin;
      // cell.mNetTimeLb.text = [self dateAndStrings:model.createdAt];
      cell.mNetServerLb.text = @"vv";
    }
  }
  return cell;
}



-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  if(_dataList.count>0){
    YSMasonryPileModel *model = [[YSMasonryPileModel alloc] initWithDict:[self.dataList objectAtIndex:indexPath.row]];
    
    if(model!=nil){
      // [self updateNetWorkServer:model.deviceprolieid];
    }
  }
}


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  return 100;
}

-(NSString*)dateAndStrings:(NSString*)date{
  if(date!=nil){
    NSArray *strtime = [date componentsSeparatedByString:@"T"];
    //NSString *strtime = [date stringByReplacinGoccurrencesOfString:@"T" withString:@" "];
    return strtime[0];
  }
  return @"None";
}

//添加add设备
-(void)onAddClick{

}
@end

十三:所用到的常量一些定义:

Constants.h


#import <Foundation/Foundation.h>

#define BASE_URL @"http://110.22.33/ilLoRaWan/"

#define USERJWTKEYS @"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJsb3JhLWFwcC1zZXJ2ZXIiLCJhdWQiOiJsb3JhLWFwc"

至此!

以上详细的代码,主要就是mode数据层那,修改自己的json的返回数据,与一些字典类型的转换,就没其他的难点了。这样写的主要目的是,思路逻辑更清晰,后期维护也简单,分开着写代码更简洁。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: IOS-MVC层读取服务器接口JSON数据

本文链接: https://lsjlt.com/news/30418.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • IOS-MVC层读取服务器接口JSON数据
    此篇文章主要讲述获取服务器JSON接口数据,以便大家在今后的物联网信息时代,移动数据肯定都是需要网络数据的,那么就需要用一个分布集中,整体化的,规范性的创建所需的文件,同时方便以后维...
    99+
    2022-06-04
    IOS 服务器 JSON数据
  • Nodejs读取本地json文件,输出json数据接口方式
    目录Nodejs读取本地json文件,输出json数据接口第一步:准备本地JSON文件第二步:编写nodejs服务程序第三步: 测试请求接口数据nodejs读取本地json文件中文乱...
    99+
    2022-11-13
    Nodejs读取json文件 读取本地json文件 输出json数据
  • python怎么读取api接口数据
    要读取 API 接口数据,可以使用 Python 的 `requests` 模块来发送 HTTP 请求。以下是一个示例代码,演示如何...
    99+
    2023-08-25
    python
  • uniApp 对接安卓平板刷卡器, 读取串口数据
    背景: 设备: 鸿合 电子班牌 刷卡对接 WS-B22CS, 安卓11; 需求: 将刷卡器的数据传递到自己的App中, 作为上下岗信息使用, 以完成业务; 对接方式: 厂家技术首先推荐使用 接收自定义广播的方式来获取, 参考代码如下  ...
    99+
    2023-10-25
    uni-app
  • 读取阿里云服务器数据
    本文主要介绍如何通过编程方式读取阿里云服务器上的数据。阿里云服务器是阿里集团提供的云服务器服务,它提供了稳定、灵活、高效的计算和存储能力。本文将通过Python编程语言,演示如何连接阿里云服务器,读取服务器上的数据。 在使用阿里云服务器之前...
    99+
    2023-10-29
    阿里 服务器 数据
  • 云服务器读取u盘数据
    首先,云计算可以实现灵活的资源管理和动态扩展。企业可以根据业务需要来动态分配和调整资源,以适应不同的需求和环境。例如,如果一个企业需要存储大量的数据来分析市场趋势,他们可以选择购买云服务器来存储和扩展数据。另一方面,如果一个企业需要处理大量...
    99+
    2023-10-28
    服务器 数据
  • 链接服务器读取Mysql-
    可以毫不夸张的说:“网上所有搜索出来的答案,都没有解决我的问题”,我是采用以下的方式处理此异常,借此宝地mark一下     今天使用链接服务器查询Mysql数据库时,出现以下问题: 消息 7347,级别 16,状态 1,第 13 行链...
    99+
    2015-12-27
    链接服务器读取Mysql-
  • Java怎么调用接口获取json数据解析后保存到数据库
    本篇内容主要讲解“Java怎么调用接口获取json数据解析后保存到数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么调用接口获取json数据解析后保存到数据库”吧!Java调用接口...
    99+
    2023-07-05
  • C# webservice 接收json数据 接口返回 远程服务器返回错误: (500) 内部服务器错误
    C# post 调用webservice 服务端接口,会返回上面那个错误,8成是发送的数据和接口不符合造成的。有2种情况 第一种情况如下:如果类型是默认request.ContentType = "application/x-www-for...
    99+
    2023-09-06
    c# json 服务器
  • 服务端nodejs抓取jsonp接口数据实现示例
    目录前言方法思路Node环境动态执行脚本eval()Functionvm.runInThisContext (推荐)完整代码实现前言 众所周知,jsonp 接口返回的是一段 js 脚...
    99+
    2024-04-02
  • Vue.js:Vue-Router动态路由从服务器接口获取路由数据
    目录 需求实现思路1、添加路由2、添加时机3、获取路由配置4、响应式路由5、路由跳转6、路由排序7、更新路由 问题参考文章 文档 https://v3.router.vuejs....
    99+
    2023-09-01
    vue.js 服务器 前端
  • 如何读取云服务器中的数据库
    读取云服务器中数据库的方法:登录云服务器提供商 → 打开云服务器控制台 → 点击左侧“快照”功能菜单 → 下载已备份好的文件到本地即可。在云服务器未过期的前提下,知道数据库地址/主机,数据库用户名和密码,可通过Navicat等 mysql管...
    99+
    2024-04-02
  • 阿里云服务器读取端口数据失败:原因及解决方法
    简介 在使用阿里云服务器时,有时会遇到读取端口数据失败的问题。本文将探讨这个问题的原因,并提供一些解决方法。原因分析1. 端口配置错误首先,读取端口数据失败可能是由于端口配置错误引起的。在阿里云服务器上,端口配置需要正确设置才能正常工作。如...
    99+
    2024-01-29
    阿里 解决方法 端口
  • 如何使用Python的文件接口读取和处理二维码数据?
    二维码(QR Code)是一种常见的二维条形码,它可以存储大量的信息,广泛应用于商业、物流、支付等领域。在实际应用中,我们常常需要读取和处理二维码数据。本文将介绍如何使用Python的文件接口读取和处理二维码数据。 一、安装必要的库 在Py...
    99+
    2023-10-09
    文件 接口 二维码
  • 读取授权数据包时与MySQL服务器的连接中断该怎么办
    读取授权数据包时与MySQL服务器的连接中断该怎么办,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Ubuntu 18.04 mysql 5...
    99+
    2024-04-02
  • CSV导出(通过读取数据字节流直接上传文件到服务器)
    文件上传服务器 文件之前读取大多数都是用前端点击相应传入后端,通过HttpServletResponse response得输入输出流进行导入导入导出数据。 近期碰到得需求是定时查询数据库数据并通过csv文件上传至系统。所以不能使用Http...
    99+
    2023-09-01
    OutputStream 文件上传 excel导出 csv导出 字节流
  • 如何从 TCP 套接字服务器读取所有数据并随后执行操作
    本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何从 TCP 套接字服务器读取所有数据并随后执行操作》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~问...
    99+
    2024-04-04
  • 后端服务器中实现MySQL数据库操作接口
    1. 连接MySQL数据库 首先,在Node.js中连接MySQL数据库需要用到mysql模块。可以使用npm包管理器进行安装: npm install mysql 安装完成之后,在Node.js中引入mysql模块: const mysq...
    99+
    2023-09-17
    mysql 服务器 后端 中间件 javascript
  • 如何解决MySQL报错:从服务器读取数据包出错
    当MySQL报错“从服务器读取数据包出错”时,可能是由于以下几个原因引起的:1. 数据包大小超过了MySQL服务器的限制。2. 网络...
    99+
    2023-10-10
    MySQL
  • 云服务器接收数据
    云服务器可以接收来自其他服务提供者的数据,这意味着您可以将数据存储在云服务器上或从云服务器上读取数据。以下是一些可以存储和访问的选项: 数据库:您可以使用云服务器管理您的数据库。您可以将数据保存在数据库中,并使用数据库提供的功能来管理表...
    99+
    2023-10-27
    服务器 数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作