最近业务需要在表上面添加几个字段,用于是按月分表的,预计要提供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编写脚本来制造大量数据并批量写入数据库。 首先,我们需要理解制造大数据的基本思路。通常,我们可以通过循环结构生成随机或预定义的数据,例如使用`for`或`while`循环,配合`Random`类...
各类交换机配置文件批量备份脚本,在脚本同目录下建立switch.txt交换机资料,并修改相关参数,即可在SecureCRT中运行脚本
自己制作的可按需求定时每分钟、每小时、每天多次批量上传本地文件到阿里云OSS存储,Java脚本后端服务自动执行,只需更改账号AccessKey和指定目录即可,递归扫描上传指定目录文件,整体流程有不懂环节可私信我
脚本上有备注,将java项目打为jar包后,替换jar的包名为项目包名即可,log文件会自动生成,方便好用。
4. **编程语言集成**:如果你熟悉编程,可以通过Python、Java、C#等语言的数据库连接库来批量执行SQL。例如,Python的`pyodbc`或`pymysql`库可以读取SQL文件并逐个执行。 5. **存储过程**:在某些情况下,可以创建...
linux bash: YOUR_LIB=your_path for jar in `ls $YOUR_LIB/*.jar` do CLASSPATH="$CLASSPATH:""$jar" done windows : SETLOCAL ENABLEDELAYEDEXPANSION ... echo %CLASSPATH%
批量执行SQL脚本的能力对于开发者和DBA(数据库管理员)来说至关重要,尤其是在处理大量数据更新、表结构修改或数据迁移时。本文将深入探讨批量执行SQL脚本的原理以及提供的源码实现。 首先,批量执行SQL脚本通常...
运行bat文件,对IE一键设置ActiveX控件、JAVA脚本、活动脚本。win7及以上版本,最好采用右键点击,选择以管理员身份运行bat文件。
在Java编程环境中,批量上传图片是一项常见的功能,尤其在Web应用中,如社交媒体、电子商务或者图库管理系统等。本项目提供了完整的代码实现,使得开发者能够快速集成到自己的开发工具中,实现用户友好的批量图片...
##### 4.2 Java批量打印实现 ```java public static void batchPrintPdfs(List<String> pdfPaths) { for (String path : pdfPaths) { if (!printPdf(path)) { System.out.println("打印失败: " + path); } else...
java_SQL文件批量删除注释 ,实现自动批量处理Sql脚本中的注释,方便发布您自己的脚本,简单好用。亲测可以用的,谢谢支持。
批量执行sql脚本的web工程,通过myeclipse导入工程即可,经过测试可以批量导入oracle与sql server2005的脚本,而且是web页面的向导式执行*.sql脚本文件 支持事务,任何执行过程出现异常,均会提示并且回滚操作,页面...
标题中的“nexus二进制库Jar包批量上传脚本工具”是指用于自动化上传Java的JAR文件到Nexus仓库的脚本程序。Nexus是一个流行的仓库管理器,广泛应用于软件开发环境中,尤其是Java生态系统,它能管理和分发各种类型的...
在Android或Java开发中,"ant批量打包脚本"是一个非常实用的技巧,它可以帮助开发者高效地完成应用的打包工作,尤其在面临多版本、多渠道发布时更为显著。Ant是Apache组织提供的一款开源构建工具,类似于Java领域的...
总的来说,这些资源为你提供了在Java环境中调用Shell脚本所需要的基础工具和示例,涵盖了SSH连接、命令执行和交互式脚本控制。通过学习和使用这些库,你将能够构建强大的系统管理工具和自动化解决方案。
本话题聚焦于“Java批量图片上传”,这通常涉及到Web应用中的文件上传功能,尤其是处理大量图片的情况。在Oracle数据库环境下,这些图片数据可能需要存储在数据库中或者与数据库紧密关联。 首先,我们要理解图片...
### Java批量编译技术解析与应用 在软件开发过程中,特别是在大型项目中,代码的管理和编译成为了一项挑战性的任务。传统的手动编译不仅耗时且容易出错,因此,自动化工具和技术变得至关重要。Java作为一种广泛使用...
java利用爬虫批量下载songtaste歌曲: 基本原理如下: ①.在一个页面中,利用爬虫,获取到当前页面所有歌曲的id, ②.然后根据歌曲的id,找到下载歌曲的页面,一般url是类似这样子的: ...③....④....⑤....Ps:如果songtaste的网址源...
因此,出现了批量执行Sql脚本的工具,如我们这里提到的"批量执行Sql脚本工具",它能有效提升工作效率,确保数据操作的一致性和准确性。该工具由作者自行编写,并提供了源码,这为用户提供了更多的定制化可能。 批量...
通过这些功能,Java批量改名工具成为了一个强大且灵活的解决方案,对于开发者和IT专业人员来说,是日常工作中不可或缺的工具之一。它简化了文件管理,尤其是在处理大量代码文件或资源文件时,大大提升了开发效率和...