最近业务需要在表上面添加几个字段,用于是按月分表的,预计要提供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; } }
全文完。
相关推荐
制造大数据量java脚本,批量写入脚本。 使用java程序制造大量的数据,直接写入数据库,代码简单易懂 制造数据 java脚本
各类交换机配置文件批量备份脚本,在脚本同目录下建立switch.txt交换机资料,并修改相关参数,即可在SecureCRT中运行脚本
脚本上有备注,将java项目打为jar包后,替换jar的包名为项目包名即可,log文件会自动生成,方便好用。
自己制作的可按需求定时每分钟、每小时、每天多次批量上传本地文件到阿里云OSS存储,Java脚本后端服务自动执行,只需更改账号AccessKey和指定目录即可,递归扫描上传指定目录文件,整体流程有不懂环节可私信我
linux bash: YOUR_LIB=your_path for jar in `ls $YOUR_LIB/*.jar` do CLASSPATH="$CLASSPATH:""$jar" done windows : SETLOCAL ENABLEDELAYEDEXPANSION ... echo %CLASSPATH%
java_SQL文件批量删除注释 ,实现自动批量处理Sql脚本中的注释,方便发布您自己的脚本,简单好用。亲测可以用的,谢谢支持。
批量执行sql脚本的web工程,通过myeclipse导入工程即可,经过测试可以批量导入oracle与sql server2005的脚本,而且是web页面的向导式执行*.sql脚本文件 支持事务,任何执行过程出现异常,均会提示并且回滚操作,页面...
linux 批量解压文件shell脚本 教程:https://www.bilibili.com/video/BV1Zi4y1C7rL?spm_id_from=333.999.0.0
Java程序调用linux命令、脚本,支持程序在服务器上使用linux命令。工具类为:ProcessUtil,支持单个命令和批量命令执行函数,同时在工具类中添加了getFileLineNumByCmd函数支持通过linux命令获取文件行数的样例。
linux 一键启动 jar包 批处理脚本,适用于java 项目,spring boot 一键启动,停止,重启 等,代码简洁,可直接使用.
在集群上批量运行脚本, 入参有5个: status: |stop> filename:运行的文件名 servername:机器名前缀 startno:机器开始序号 endno:机器结束序号 请根据实际情况修改脚本内的java路径
批量下载android源码 的java脚本 先建个android源码的文件夹,右键打开bash,将控制板生成的内容粘贴到git即可
SQLSERVER(可修改IP和端口port)和ORACLE生成批量执行脚本的方法批处理 sql版本把控制台的内容复制出来,粘贴到bat文件中,单击执行就ok oracle版本把控制台生成的脚本在,plsql中用新建个“命令窗口”,把控制台的...
NULL 博文链接:https://shihuan830619.iteye.com/blog/2273827
java脚本开发根据客户IP获取IP的具体地理位置信息,只能用炫酷来形容,感兴趣就下载看看吧
该压缩工具基于 Google Closure Compiler,采用默认的Simple模式进行压缩,工具由一个jar包和一个批处理文件组成,实现了对目标文件夹内所有的js和css进行压缩替换的功能。工具简单方便,下载并解压后,直接双击GCC_...
主要介绍了Java调用linux shell脚本的方法,需要的朋友可以参考下
java 下执行mysql 批量插入的几种方法及用时,1000次插入方法的比较。
用于zabbix监控脚本-批量获取docker容器名称及容器中的java进程ID,将结果格式化为json格式,直接返回给zabbix
excel文件中批量生成insert语句,为了初始化导入数据库里面的数据,如导入期初库存或者商品档案,员工数据等等