数据的迁移

思路:比如现在10月份,需要把10月份之前的数据放入到另一张表中.

步骤:

A.查询出10月份之前的数据.

B.利用insert into 表(字段) values (值);将数据插入到新的表中.

C.删除10月份之前的数据,在旧表中.

代码如下:

JSP页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script src="admin/addPageInit.js?${JSCSS}" type="text/javascript"></script>
<form name="form1" method="post" action="exportBills" id="form1">
	<table class="table table-bordered">
		<tr>
			<td class="w50 tc"><h2>导出电话账单日期:</h2></td>
			<td class="w50 tc"><input class="form-control" name="addTime" id="datetimepicker" type="text" /></td>
		</tr>
	</table>
	<div class="form-group">
		<input type="submit" value="提交" id="Button1"
			class="form-control btn btn-success" />
	</div>
</form>
<%@include file="datePicker.jsp"%>//时间控件

当点击submit的时候,调用exportBills方法

Action:

// 导出电话账单
	@Action(value = "exportBills")
	public String manageExportBills() throws Exception {
		// 查询此日期的电话账单
		billService.exportBills(getParameter("addTime", "0"), map);
		return SUCCESS;
	}

service(实现类):

        @Override
	@Transactional(propagation = Propagation.REQUIRED)//开启事务
	public void exportBills(String addTime, Map<String, Object> map) throws Exception {
		// 查询此日期的电话账单
		List<Bill> models = findByHql("from Bill where addTime<=:addTime and flag>:flag", DataUtils.getMap("addTime", addTime,"flag","-1000"));
		for(Bill bill:models){
			map = YTTools.getFieldAndValue(bill);
			map.put("uid", bill.getUser().getId());
			map.put("id", bill.getId());
			map.put("flag", bill.getFlag());
			map.put("addTime", bill.getAddTime());
			StringBuilder fields = new StringBuilder();
			for (Entry<String, Object> entry : map.entrySet()) {
				fields.append(","+entry.getKey());
			}
			if(map.size()>0){
				String values = fields.toString().replaceAll(",", ",:");
				String hql = "insert into Billhistory("+fields.toString().substring(1, fields.length())+")"
						+ " values("+values.substring(1,values.length())+")";
				// 新增操作
				executeBySql(hql, map);
			}
		}
		// 删除操作
		executeByHql("delete Bill where addTime<=:addTime and flag>:flag", DataUtils.getMap("addTime", addTime,"flag","-1000"));

	}

工具类:

package cn.yitongworld.util;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class YTTools {
	public static Map<String,Object> getFieldAndValue(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
	Map<String,Object> map = new HashMap<String,Object>();
	//获取实体类的所有属性,返回Field数组  
        Field[] fields = model.getClass().getDeclaredFields();
        //遍历所有属性
        for(Field field:fields){    
        		//获取属性的名字
                String oldName = field.getName();    
                Object value = null;
                String name = oldName.substring(0,1).toUpperCase()+oldName.substring(1); //将属性的首字符大写,方便构造get,set方法
                String type = field.getGenericType().toString();    //获取属性的类型
                if(type.equals("class java.lang.String")||type.equals("class java.lang.Integer")
                		||type.equals("class java.lang.Double")||type.equals("class java.lang.Boolean")){   //如果type是类类型,则前面包含"class ",后面跟类名
                    Method m = model.getClass().getMethod("get"+name);
                    value = m.invoke(model);    //调用getter方法获取属性值
                    map.put(oldName, value);
                }
               
            }
        return map;
    }

}

参考文献:

1.java的反射机制,通过class找到java:http://blog.csdn.net/liujiahan629629/article/details/18013523

2.遍历map的两种方法:http://blog.163.com/fw_long/blog/static/51771186201392982041337/

3.java Class getDeclaredFields()与getFields()的区别:http://hw1287789687.iteye.com/blog/1942056

时间: 2024-11-06 09:39:12

数据的迁移的相关文章

MySQL两千万数据优化&amp;迁移

最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不方便做统计和分析.所以我需要创建一张新表,把旧表中的数据一条一条取出来优化后放回新表: 一. 清除冗余数据,优化字段结构 2000W数据中,能作为查询条件的字段我们是预知的.所以将这部分数据单独创建新的字段,对于有规则的数据合理改变字段结构,比如身份证就是varchar(18).对于不重要的数据我们

【oracle11g,14】表空间管理3:临时表空间,表空间的脱机和只读,数据文件迁移,更改表空间数据文件的大小,表空间数据文件的迁移,使用非标准块的表空间,bigfile 表空间

一.临时表空间: 如果临时表空间不足会报ora-1652错误. 二.什么时候使用临时表空间: 排序和分组 索引create或rebuild order by 或group by distinct 操作 union或intersect或minus sort-merge joins analyze 用于排序.分组.索引等操作,在pga中的sort_area中排序,会将排序的中间结果存放到临时表空间中,如果想提高排序的效率可以提高sort_area_size参数值. 临时表空间不能存放持久化对象,推荐

NetApp 7MTT 工具进行存储数据的迁移

1 NetApp 7MTT 工具进行存储数据的迁移 1.1 7MTT的迁移流程 提前准备虚拟机一台用于安装7MTT工具. 1.2 配置要求 Dual-core x64 processor, 1.0 GHz or more 8 GB RAM 40 GB free space on the HDD 系统要求: Windows 7 Enterprise Windows 7 Enterprise SP1 Windows Server 2008 Standard Windows Server 2008 R

浅谈Android数据库版本升级及数据的迁移

概述 Android开发涉及到的数据库采用的是轻量级的SQLite3,而在实际开发中,在存储一些简单的数据,使用SharedPreferences就足够了,只有在存储数据结构稍微复杂的时候,才会使用数据库来存储.而数据库表的设计往往不是一开始就非常完美,可能在应用版本开发迭代中,表的结构也需要调整,这时候就涉及到数据库升级的问题了. 数据库升级 数据库升级,主要有以下这几种情况: 增加表 删除表 修改表 增加表字段 删除表字段 增加表和删除表问题不大,因为它们都没有涉及到数据的迁移问题,增加表只

Redis异构集群数据实时迁移

背景 由于历史原因,公司的缓存方案使用的是Codis,并且一个大部门公用一个集群,我们计划废弃Codis,用Redis原生的集群架构,为什么要废弃Codis呢,主要有两个原因:1.Codis官方已经很久没有更新维护了,Redis官方版本已经迭代到5.x.x了,codis-server还是3.x.x,Redis的一些新特性无法支持:2.基于风险均摊.鸡蛋不放一个篮子的原则,目前我们这样的用法违背了这一原则,如果一个集群出问题,那么整个部门的全部服务都受影响.在前期和业务部门调研的过程中发现,大家用

实战利用LVM卷镜像技术实现不停业务的数据在线迁移,核心存储升级混闪V7000F 转

实战利用LVM卷镜像技术实现不停业务的数据在线迁移,核心存储升级混闪V7000F 一.介绍 所有数据从旧设备到新设备实现了高速在线迁移,业务系统进行了无缝衔接.整个迁移.切换过程关键设备零重启,对用户正常操作ERP画面未造成任何影响. 二.目的和意义 存储设备运行更加稳定 新的IBM V7000存储(2076-624)属于V7000系列的第三代产品,2016年9月投入市场.存储系统的设计从控制器.数据通道.I/O接口,到磁盘环路都是采用冗余结构,理论上不存在系统本身的单点故障问题.该产品依靠其卓

ubuntu 中数据的迁移

1.先停止mysql /etc/init.d/mysql stop 2.创建一个目录作为临时存放mysql数据的目录 mkdir /mysqldata 3.ubuntu中mysql数据存放在/var/lib/mysql 目录中,并且属于mysql用户和mysql组,权限是700,所以我们也需要给迁移的目录/mysqldata相同的的用户和组以及权限 chown -vR mysql:mysql /mysqldata chmod 700 /mysqldata 4.复制mysql文件的内容到mysql

mssql借助链接服务器进行数据快速迁移

在工作中,遇到了一个任务,需要将A数据库的数据迁移到B数据库,两个数据库的数据结构是一样的.B数据库已经在相当数量的数据了,故而不能通过复制数据库的方式来实现.  旧方法 在对数据迁移的时候,一开始使用的是以下方法: (1)使用SSMS的”生成和发布脚本”功能,将A数据库的数据导出成sql脚本. 脚本类似于: INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (10649, 0, N'其他

如何通过RMAN进行裸设备和文件系统之间的数据文件迁移

[[email protected] ~]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Wed Nov 30 14:41:53 2005 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - P

数据云迁移方便吗

对于大多数人来说搬家一直都是一件很麻烦的事,以致于平时都不太敢买太多的东西.搬家起来弄的手忙脚乱的,平时看着没多少东西,收拾后是一包又一包.这么麻烦为什么还要搬家?出于租房费用,上班时间,总之各种原因,让你不得不搬. 那么云迁移也有各种各样的麻烦吗?它有哪些方面吸引着用户必须进行云数据迁移工作? 自云技术出现以来,基于云的计算解决方案的流行度就一直是有增无减.这类解决方案恰好满足了企业需求,是企业改进工作职能的最佳选择.经过一段时间的发展,云计算已成为必须的存在,现在它以多种多样的方法在使用着.