前台传来的新数据与数据库中的旧数据比较更新算法

工作中遇到一个很小的功能,发现写好还有点难度,经过一晚上的思考,把成果记录下。

问题:

数据库中保存了一些数据,前台更新操作传来新的数据。如何比较差异,进行更新。如:

前台传来1,2,3,数据库中有3,5。则需要在数据库中增加1,2;在数据库中删除5;原有数据3不变。

解决方法一:

先把数据库中原的数据全部清空,然后把前台的数据全部执行插入。

这种方法简单,很容易理解,以及判断及正确性。缺点是如果原数据库数据较多,则重复删除后增加,则效率不高。

解决方法二:

查询原数据库中的数据,做为待删除的列表。

遍历前台传来的数据,对每一个在上边待删除列表中查询,如果存在,则说明此条数据要在数据库中保留。则从待删除列表中移除。若不存在,则说明需要在数据库中增加一条数据,放到一个新建列表中。

完成遍历后一次性删除待删除列表中的数据,插入新建列表中的数据。

List<AppSystem> appSystem_deleteList = appSystemDao.getByAppkey(app
		.getAppkey());
List<AppSystem> appSystem_addList = new ArrayList<AppSystem>();
if (sysStr != null && !"".equals(sysStr)) {
	// 组成hashmap只为加速查询
	Map<String, AppSystem> appSystem_searchMap = new HashMap<String, AppSystem>();
	for (AppSystem as : appSystem_deleteList) {
		appSystem_searchMap.put(as.getSystemid().toString(), as);
	}
	// 依次将前台传来的新值进行循环检查
	String[] systemIds = sysStr.split(",");
	for (String systemId : systemIds) {
		if (appSystem_searchMap.containsKey(systemId)) {
			// 如果匹配到,则说明仍然需要,则从删除列表去去除
			appSystem_deleteList.remove(appSystem_searchMap
					.get(systemId));
		} else {
			// 未匹配到,则说明需要增加
			appSystem_addList.add(new AppSystem(app.getAppkey(), Long
					.parseLong(systemId)));
		}
	}
}
appSystemDao.batchAdd(appSystem_addList);
appSystemDao.batchDelete(appSystem_deleteList);
时间: 2024-10-14 15:11:14

前台传来的新数据与数据库中的旧数据比较更新算法的相关文章

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(一)

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中,这个问题分一下几步走 1.将弹出框真分页后复选框选择的数据保存. 2.将弹出框保存的数据传到父页面上. 3.将数据在父页面上显示. 4.点击保存将信息存入数据库中. 首先来第一步将弹出框真分页后复选框选择的数据保存. 思路很简单就是先真分页,然后在点击下一页的时候扫描这一页所有点击复选框的数据保存到一个变量数组中.下面就是主要代码: ASP代码: <%@ Page Language="C#" AutoEventWire

SQLServer 从xml 文件中提取节点数据到数据库中

原文出处:http://blog.csdn.net/kk185800961/article/details/12350715  转载请注明出处 XML实例文件: <?xml version="1.0" encoding="utf-8"?> <!-- edited with XMLSpy v2010 (http://www.altova.com) by fengshuai (founder) --> <Root> <Frame

关于从JSP页面插入数据到数据库中乱码问题的解决

问题描述:最近我在写一个j2ee的留言板系统模块,遇到了一个非常让我头大的问题,当我从JSP页面输入数据后,通过hibernate中的业务逻辑类HQL语句把这个数据插入到本地的mysql数据库中,可是当我发现成功插入后在数据库中看到的是乱码,再回显到浏览页面中看到的也是一堆乱码,我的jsp页面设置编码为UTF-8,如下: <%@ page language="java" contentType="text/html; charset=UTF-8"    pag

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,

判断数据在数据库中是否已存在.

今天下午和同事发生因为判断数据是否在数据库中已存在产生分歧.简易代码如下: //观点一,先取出数据库中已存在ID存入内存,再进行判断 //数据太多情况,内存爆炸 DateTable dt = ExcuteSQL('SELECT ID FROM TABLE'); //List为数据集,已经去重 foreach(var item in List){ //观点二,在for循环中根据ID查询是否已存在 //for循环执行数据库?没这么干过 DateTable dt = ExcuteSQL(string.

一起数据库中过期用户数据堆积问题的排查过程

[文章摘要] 对于使用数据库来存放大量用户的软件来说,过期数据的清理机制需要慎重设计.如果设计不当,则会导致数据的误删除或清理不完全. 本文对某数据清理模块因参数配置不当而导致的过期用户数据堆积问题进行了详细的分析,为相关软件问题的分析及解决提供了有益的参考. 一.问题描述 在某软件系统中,为了让不同种类的用户享受对应的服务,引入了一个信箱服务等级的概念,即不同服务等级的用户具有不同的权限."一分钱,一分货",对于运营商来说,高服务等级的用户收取高的资费,提供高质量的服务. 为了维护不

asp.net 从Excel表导入数据到数据库中

http://www.cnblogs.com/hfzsjz/archive/2010/12/31/1922901.html http://hi.baidu.com/ctguyg/item/ebc857e90e436ae1fb42ba01 1 <form action="" method="post" runat ="server"> 2 <div> 3 <span>请选择文件:</span><

数据库中批量导入数据,有两列的值需要从其他表中查出来,我现在没有思路,求解惑

我现在批量往数据库里导正式数据(sql insert),但是数据中有三列分别是岗位,办事处,大区,给的数据中只给了岗位的值,办事处的值可以通过岗位值在岗位表查到,大区的值可以通过办事处的值在办事处表里查到.现在我已经把其他数据都导进去了,只剩办事处和大区没有值,我该如何批量更新这两列的值啊 导入的数据的表: 岗位表: 办事处表: 本人sql不是很好,希望sql大神能给出来解惑一下,拜谢~ 数据库中批量导入数据,有两列的值需要从其他表中查出来,我现在没有思路,求解惑 >> mysql 这个答案描

ASP.NET MVC使用jQuery来POST数据至数据库中

学习ASP.NET MVC程序,结合jQuery客户端代码,Post数据至数据库去.Insus.NET今天写一个完整性的例子. 在数据库中,创建一个表[dbo].[TestUser]: 既然是把数据存入数据库中,得先在数据库创建一个存储过程[dbo].[usp_TestUser_Insert]: 程序与数据库连接以及逻辑处理,使用这个http://www.cnblogs.com/insus/archive/2010/01/23/1654653.html 在MVC中,需要创建一个模型Insus.N