`
53873039oycg
  • 浏览: 837287 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论
阅读更多

     最近业务需要在表上面添加几个字段,用于是按月分表的,预计要提供3年共36各表的修改脚本,本人想偷点懒,写了个简单的Java,一次生成,源码如下,我就不一一解释了,主要思路是替换字符串,很简单。

    

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class 批量产生脚本 {
	public static void main(String[] args) throws Exception {
		String baseStr = readFileContent("f:/saveFile/模版.sql", "utf-8");
		String tmpStr=null;
		List<String> monthsList = getEveryMonth("2011-01-01", "2015-01-01", "");
		StringBuffer result=new StringBuffer(5120);
		for (String str : monthsList) {
			tmpStr=baseStr.replaceAll("#yyyymm#", str);
			result.append(tmpStr).append("\r\n");
		}
		writeStrToFile(result.toString(),"f:/saveFile/处理结果.sql","utf-8");
	}

	public static void writeStrToFile(String str, String filePath,
			String charsetName) throws Exception {
		if (charsetName == null) {
			charsetName = "utf-8";
		}
		File file1 = new File(filePath);
		OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(
				file1), charsetName);
		out.write(str);
		out.close();
	}

	public static String readFileContent(String fileName, String charsetName)
			throws Exception {
		if (charsetName == null) {
			charsetName = "utf-8";
		}
		File file = new File(fileName);
		if (!file.exists() || file.isDirectory()) {
			return null;
		}
		InputStreamReader read = new InputStreamReader(
				new FileInputStream(file), charsetName);// 考虑到编码格式
		StringBuffer result = new StringBuffer((int) file.length());
		BufferedReader bufferedReader = new BufferedReader(read);
		String lineTxt = null;
		while ((lineTxt = bufferedReader.readLine()) != null) {
			result.append(lineTxt).append("\r\n");
		}
		return result.toString();
	}

	public static List<String> getEveryMonth(String beginDateStr,
			String endDateStr, String split) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date beginDate = null, endDate = null;
		try {
			beginDate = format.parse(beginDateStr);
			endDate = format.parse(endDateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		Calendar c = Calendar.getInstance();
		c.setTime(endDate);
		int endYear = c.get(Calendar.YEAR);
		int endMonth = c.get(Calendar.MONTH) + 1;
		c.setTime(beginDate);
		int startYear = c.get(Calendar.YEAR);
		int startMonth = c.get(Calendar.MONTH) + 1;
		int totalM = 12 * (endYear - startYear) + endMonth - startMonth;
		List<String> everyMonths = new ArrayList<String>();
		String tmpStr = formatYear(startYear) + split
				+ formatMonthDay(startMonth);
		everyMonths.add(tmpStr);
		for (int i = 0; i < totalM; i++) {
			startMonth = startMonth + 1;
			if (startMonth > 12) {
				startMonth = 1;
				startYear += 1;
			}
			tmpStr = formatYear(startYear) + split + formatMonthDay(startMonth);
			everyMonths.add(tmpStr);
		}
		return everyMonths;
	}

	public static String formatMonthDay(int decimal) {
		DecimalFormat df = new DecimalFormat("00");
		return df.format(decimal);
	}

	public static String formatYear(int decimal) {
		DecimalFormat df = new DecimalFormat("0000");
		return df.format(decimal);
	}

}

    如想得到2个日期内的每一天,可以看下:

    http://bbs.ibeifeng.com/simple/index.php?t14118.html

    代码我也拿过来了,如下:

   

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * From:http://bbs.ibeifeng.com/simple/index.php?t14118.html
 * 
 * @author Administrator
 * 
 */
public class GetEveryDayHelper {
	public static void main(String[] args) {
		List<String> list = GetEveryDayHelper.getEveryday("2014-01-01",
				"2014-03-02", "_");
		for (String result : list) {
			System.out.println(result);
		}
	}

	/** 闰年中每月天数 */
	private static final int[] DAYS_P_MONTH_LY = { 31, 29, 31, 30, 31, 30, 31,
			31, 30, 31, 30, 31 };

	/** 非闰年中每月天数 */
	private static final int[] DAYS_P_MONTH_CY = { 31, 28, 31, 30, 31, 30, 31,
			31, 30, 31, 30, 31 };

	/** 代表数组里的年、月、日 */
	private static final int Y = 0, M = 1, D = 2;

	/**
	 * 将代表日期的字符串分割为代表年月日的整形数组
	 * 
	 * @param date
	 * @return
	 */
	public static int[] splitYMD(String date) {
		date = date.replace("-", "");
		int[] ymd = { 0, 0, 0 };
		ymd[Y] = Integer.parseInt(date.substring(0, 4));
		ymd[M] = Integer.parseInt(date.substring(4, 6));
		ymd[D] = Integer.parseInt(date.substring(6, 8));
		return ymd;
	}

	/**
	 * 检查传入的参数代表的年份是否为闰年
	 * 
	 * @param year
	 * @return
	 */
	public static boolean isLeapYear(int year) {
		return ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)));
	}

	/**
	 * 日期加1天
	 * 
	 * @param year
	 * @param month
	 * @param day
	 * @return
	 */
	private static int[] addOneDay(int year, int month, int day) {
		if (isLeapYear(year)) {
			day++;
			if (day > DAYS_P_MONTH_LY[month - 1]) {
				month++;
				if (month > 12) {
					year++;
					month = 1;
				}
				day = 1;
			}
		} else {
			day++;
			if (day > DAYS_P_MONTH_CY[month - 1]) {
				month++;
				if (month > 12) {
					year++;
					month = 1;
				}
				day = 1;
			}
		}
		int[] ymd = { year, month, day };
		return ymd;
	}

	/**
	 * 将不足两位的月份或日期补足为两位
	 * 
	 * @param decimal
	 * @return
	 */
	public static String formatMonthDay(int decimal) {
		DecimalFormat df = new DecimalFormat("00");
		return df.format(decimal);
	}

	/**
	 * 将不足四位的年份补足为四位
	 * 
	 * @param decimal
	 * @return
	 */
	public static String formatYear(int decimal) {
		DecimalFormat df = new DecimalFormat("0000");
		return df.format(decimal);
	}

	/**
	 * 计算两个日期之间相隔的天数
	 * 
	 * @param begin
	 * @param end
	 * @return
	 * @throws ParseException
	 */
	public static long countDay(String begin, String end) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date beginDate, endDate;
		long day = 0;
		try {
			beginDate = format.parse(begin);
			endDate = format.parse(end);
			day = (endDate.getTime() - beginDate.getTime())
					/ (24 * 60 * 60 * 1000);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return day;
	}

	/**
	 * 以循环的方式计算日期
	 * 
	 * @param beginDate
	 *            endDate
	 * @param days
	 * @return
	 */
	public static List<String> getEveryday(String beginDate, String endDate,
			String split) {
		long days = countDay(beginDate, endDate);
		int[] ymd = splitYMD(beginDate);
		List<String> everyDays = new ArrayList<String>();
		everyDays.add(beginDate);
		for (int i = 0; i < days; i++) {
			ymd = addOneDay(ymd[Y], ymd[M], ymd[D]);
			everyDays.add(formatYear(ymd[Y]) + split + formatMonthDay(ymd[M])
					+ split + formatMonthDay(ymd[D]));
		}
		return everyDays;
	}

}

    全文完。

 

0
2
分享到:
评论
4 楼 53873039oycg 2014-02-17  
亿度思考 写道
不错,支持

谢谢。
3 楼 亿度思考 2014-02-17  
不错,支持
2 楼 53873039oycg 2014-02-13  
1v1_问天 写道
什么垃圾。

我个人认为这不是垃圾,这是我自己写的提高我工作效率的一个小工具,对我个人有用,还有请文明发言。
1 楼 1v1_问天 2014-02-13  
什么垃圾。

相关推荐

    制造大数据量java脚本,批量写入脚本

    本文将深入探讨如何使用Java编写脚本来制造大量数据并批量写入数据库。 首先,我们需要理解制造大数据的基本思路。通常,我们可以通过循环结构生成随机或预定义的数据,例如使用`for`或`while`循环,配合`Random`类...

    交换机配置批量备份脚本

    各类交换机配置文件批量备份脚本,在脚本同目录下建立switch.txt交换机资料,并修改相关参数,即可在SecureCRT中运行脚本

    制作的定时多次批量上传本地文件到阿里云OSS存储,Java脚本后端服务自动执行

    自己制作的可按需求定时每分钟、每小时、每天多次批量上传本地文件到阿里云OSS存储,Java脚本后端服务自动执行,只需更改账号AccessKey和指定目录即可,递归扫描上传指定目录文件,整体流程有不懂环节可私信我

    java linux启动jar包脚本

    脚本上有备注,将java项目打为jar包后,替换jar的包名为项目包名即可,log文件会自动生成,方便好用。

    SQL脚本批量执行,方便大量的SQL脚本执行。

    4. **编程语言集成**:如果你熟悉编程,可以通过Python、Java、C#等语言的数据库连接库来批量执行SQL。例如,Python的`pyodbc`或`pymysql`库可以读取SQL文件并逐个执行。 5. **存储过程**:在某些情况下,可以创建...

    java classpath 批量设置脚本

    linux bash: YOUR_LIB=your_path for jar in `ls $YOUR_LIB/*.jar` do CLASSPATH="$CLASSPATH:""$jar" done windows : SETLOCAL ENABLEDELAYEDEXPANSION ... echo %CLASSPATH%

    批量执行SQL脚本(附源码).zip

    批量执行SQL脚本的能力对于开发者和DBA(数据库管理员)来说至关重要,尤其是在处理大量数据更新、表结构修改或数据迁移时。本文将深入探讨批量执行SQL脚本的原理以及提供的源码实现。 首先,批量执行SQL脚本通常...

    java_SQL文件批量删除注释

    java_SQL文件批量删除注释 ,实现自动批量处理Sql脚本中的注释,方便发布您自己的脚本,简单好用。亲测可以用的,谢谢支持。

    java实现批量上传图片

    在Java编程环境中,批量上传图片是一项常见的功能,尤其在Web应用中,如社交媒体、电子商务或者图库管理系统等。本项目提供了完整的代码实现,使得开发者能够快速集成到自己的开发工具中,实现用户友好的批量图片...

    java 打印pdf文件 也可批量打印

    ##### 4.2 Java批量打印实现 ```java public static void batchPrintPdfs(List&lt;String&gt; pdfPaths) { for (String path : pdfPaths) { if (!printPdf(path)) { System.out.println("打印失败: " + path); } else...

    【nexus二进制库Jar包批量上传脚本工具】

    标题中的“nexus二进制库Jar包批量上传脚本工具”是指用于自动化上传Java的JAR文件到Nexus仓库的脚本程序。Nexus是一个流行的仓库管理器,广泛应用于软件开发环境中,尤其是Java生态系统,它能管理和分发各种类型的...

    ant批量打包脚本

    在Android或Java开发中,"ant批量打包脚本"是一个非常实用的技巧,它可以帮助开发者高效地完成应用的打包工作,尤其在面临多版本、多渠道发布时更为显著。Ant是Apache组织提供的一款开源构建工具,类似于Java领域的...

    java调用shell脚本

    总的来说,这些资源为你提供了在Java环境中调用Shell脚本所需要的基础工具和示例,涵盖了SSH连接、命令执行和交互式脚本控制。通过学习和使用这些库,你将能够构建强大的系统管理工具和自动化解决方案。

    Java批量编译

    ### Java批量编译技术解析与应用 在软件开发过程中,特别是在大型项目中,代码的管理和编译成为了一项挑战性的任务。传统的手动编译不仅耗时且容易出错,因此,自动化工具和技术变得至关重要。Java作为一种广泛使用...

    利用爬虫批量下载songtaste歌曲-java实现

    java利用爬虫批量下载songtaste歌曲: 基本原理如下: ①.在一个页面中,利用爬虫,获取到当前页面所有歌曲的id, ②.然后根据歌曲的id,找到下载歌曲的页面,一般url是类似这样子的: ...③....④....⑤....Ps:如果songtaste的网址源...

    批量执行sql脚本文件,支持oracle、sql server2005

    批量执行sql脚本的web工程,通过myeclipse导入工程即可,经过测试可以批量导入oracle与sql server2005的脚本,而且是web页面的向导式执行*.sql脚本文件 支持事务,任何执行过程出现异常,均会提示并且回滚操作,页面...

    java批量图片上传

    本话题聚焦于“Java批量图片上传”,这通常涉及到Web应用中的文件上传功能,尤其是处理大量图片的情况。在Oracle数据库环境下,这些图片数据可能需要存储在数据库中或者与数据库紧密关联。 首先,我们要理解图片...

    批量执行Sql脚本工具(含代码)

    因此,出现了批量执行Sql脚本的工具,如我们这里提到的"批量执行Sql脚本工具",它能有效提升工作效率,确保数据操作的一致性和准确性。该工具由作者自行编写,并提供了源码,这为用户提供了更多的定制化可能。 批量...

    java批量改名工具

    通过这些功能,Java批量改名工具成为了一个强大且灵活的解决方案,对于开发者和IT专业人员来说,是日常工作中不可或缺的工具之一。它简化了文件管理,尤其是在处理大量代码文件或资源文件时,大大提升了开发效率和...

    Java多线程读取大文本文件并批量插入MongoDB的实战代码

    Java多线程读取大文本文件并批量插入MongoDB的代码,文本文件,csv文件,可以结合POI改造使其支持excel。 适合做大量文本数据或日志文件入库的场景,大文本被拆分成多个线程处理,速度快。 批量插入MongoDB,存在则...

Global site tag (gtag.js) - Google Analytics