不同的数据库不同字段的同步

不同的数据库不同字段的同步,第1张

--测试环境mssql2008

--表1在数据库1

Create TAble 表1

(

    id int,

    姓名 varchar(10),

    电话 Varchar(20),

    地址 Varchar(30)

)

--表2在数据库2

Create Table 表2

(

    jid int,

    name Varchar(10),

    tel Varchar(20),

    [add] Varchar(30)

)

--问题一

--在数据库1执行

insert into 表1(id,姓名,电话,地址)

select ID,name,tel,[add] from 数据库2.dbo.表2

--问题二

--创建触发器

--表1新增同步表2,按id对应,如果不存在则新增,否则就更新

--在数据库1执行

 

create trigger tr_insert on 表1

for insert

as

begin

    Merge 数据库2.dbo.表2 As A

    using

    (

    select * from inserted

    ) B

    on A.jid=B.id

    When matched Then

    Update Set A.name=B.姓名,

    A.Tel=B.电话,A.[add]=B.地址

    When not matched Then

    Insert Values(B.id,B.姓名,B.电话,B.地址)

End

点击登录之后,验证成功就会跳到好友页面。这个时候需要显示你已经有的好友。

那么在tableViewCell中显示好友姓名,需要数据源,数据源从服务器获看你是否有好友,检索到你的好友后把他显示在列表上。

xmpp中管理好友的类是 XMPPRoster,并且使用coredata来储存好友,达到数据持久化的效果。

那么我们可以将获取储存好友的仓库和xmppRoster对象的初始化封装在XMPPManager中。

在.h文件中声明:

//好友管理

@property(nonatomic,strong)XMPPRoster xmppRoster

遵循代理:

@interface XMPPManager : NSObject<XMPPStreamDelegate,XMPPRosterDelegate>

在 .m文件中重写init方法中:

//2.好友管理//获得一个存储好友的CoreData仓库,用来数据持久化XMPPRosterCoreDataStorage rosterCoreDataStorage = [XMPPRosterCoreDataStorage sharedInstance]//初始化xmppRosterself.xmppRoster = [[XMPPRoster alloc]initWithRosterStorage:rosterCoreDataStorage dispatchQueue:dispatch_get_main_queue()]//激活 [self.xmppRoster activate:self.xmppStream]//设置代理 [self.xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()]

接收好友请求。

将接收到好友请求的方法也封装在XMPPManager中:

// 收到好友请求执行的方法-(void)xmppRoster:(XMPPRoster )sender didReceivePresenceSubscriptionRequest:(XMPPPresence )presence{ self.fromJid = presence.fromUIAlertView alert = [[UIAlertView alloc]initWithTitle:@"提示:有人添加你" message:presence.from.user delegate:self cancelButtonTitle:@"拒绝" otherButtonTitles:@"OK", nil][alert show]}

-(void)alertView:(UIAlertView )alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ switch (buttonIndex) { case 0: [self.xmppRoster rejectPresenceSubscriptionRequestFrom:self.fromJid] break case 1: [self.xmppRoster acceptPresenceSubscriptionRequestFrom:self.fromJid andAddToRoster:YES] break default: break}}

添加好友,添加的好友必须是服务器上存在的用户,需要看对方是否同意。对方同意之后,刷新好友列表,显示出来,同时在服务器上也要添加,这里服务器上用的是coredata来存储个人的好友信息。

好友页面实现文件,遵循代理,数据源数组

在viewDidLoad中完成初始化数组,设置代理和添加好友按钮

这里简化了添加好友,写死了只能添加“张三”,如果需要添加更多,可以写成借口

接下来是tableview数据源代理方法

tableview

这时候数组明显是没有jid对象的。获取jid对象是在XMPPPRoster代理方法中实现的:

pragma mark xmppRoster 的代理方法

pragma mark 开始检索好友列表的方法-(void)xmppRosterDidBeginPopulating:(XMPPRoster *)sender{NSLog(@"开始检索好友列表")}

pragma mark 正在检索好友列表的方法-(void)xmppRoster:(XMPPRoster )sender didRecieveRosterItem:(DDXMLElement )item{NSLog(@"每一个好友都会走一次这个方法")//获得item的属性里的jid字符串,再通过它获得jid对象NSString jidStr = [[item attributeForName:@"jid"] stringValue] XMPPJID jid = [XMPPJID jidWithString:jidStr]//是否已经添加if ([self.rosterJids containsObject:jid]) {return }//将好友添加到数组中去[self.rosterJids addObject:jid]//添加完数据要更新UI(表视图更新)NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.rosterJids.count-1 inSection:0] [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]}

pragma mark 好友列表检索完毕的方法-(void)xmppRosterDidEndPopulating:(XMPPRoster )sender{NSLog(@"好友列表检索完毕")}

4. 删除好友。列表删除,数组删除,服务器删除。

pragma mark 删除好友执行的方法-(void)tableView:(UITableView )tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath )indexPath{if (editingStyle==UITableViewCellEditingStyleDelete) { //找到要删除的人XMPPJID jid = self.rosterJids[indexPath.row]//从数组中删除[self.rosterJids removeObjectAtIndex:indexPath.row]//从Ui单元格删除[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic ]//从服务器删除[[XMPPManager defaultManager].xmppRoster removeUser:jid] }}

5.进入聊天页面


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9714893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存