胶水语言就是胶水,写起也挺快的.这个脚本主要是从数据库中把表中的数据导出来生成文件.而不用每次都打开数据库编辑器去手工收集.然后结合强大的脚本(shell,bat)等基本就可以实现定时生成最新数据文本了.
目前这个groovy脚本只要输入sql语句,便会自动去反射表中的字段和类型.
脚本名称:export.groovy
然后再给这个groovy脚本写几个对应的shell\bat执行脚本
比如:
文件名:生成基站.bat
如图:

那么当每次都要生成最新数据的时候,直接去双击这些bat文件即可.或者你直接把这些bat配置到操作系统的执行任务当中去即可.
目前这个groovy脚本只要输入sql语句,便会自动去反射表中的字段和类型.
脚本名称:export.groovy
- importgroovy.sql.Sql;
- try
- {
- if(this.args.size()<1)
- {
- println"格式错误!请参照下面的正确格式"
- println"export[sql:可以正确执行的sql语句]"
- return;
- }
- }
- catch(Exceptione)
- {
- println"格式错误!请参照下面的正确格式"
- println"export[sql:可以正确执行的sql语句]"
- return;
- }
- /*
- 连接对象
- 可以根据你自己的需要调整
- */
- sql=Sql.newInstance("jdbc:oracle:thin:@10.220.51.40:1521:ORA10G","用户名","密码","oracle.jdbc.driver.OracleDriver");
- /*SQL语句可以根据自己需要调整*/
- strSql=this.args[0];
- //方法_获取表名
- defgetTableName={strSql->
- pattern=~"FROM.*"
- matcher=strSql.toUpperCase()=~pattern
- tableName="";
- while(matcher.find()){
- tableName=matcher.group()
- }
- returntableName.split('')[1];
- }
- //方法判断字符串里面是否有中文
- defisChinaese={str->
- if(str==null)
- return;
- for(iin0..str.size()-1)
- {
- if(str.charAt(i)>127)
- {
- returntrue;
- }
- }
- returnfalse;
- }
- deffile_tableName=getTableName(strSql);//表名
- defresult_columnCount=0;//列数
- defresult_columnName=[];//列名
- defresult_columnType=[];//列类型
- defresult_rowsData=[];//行数据
- defrows_count=0;
- //在该脚本的同级目录下生成已表名命名的csv文件
- file_csv=newFile("${file_tableName}.txt");
- //判断文件是否存在,如果存在写删除
- if(file_csv.exists()){
- println"在当前目录下发现已经存在${file_tableName},程序已经删除文件"
- file_csv.delete()
- }
- println"准备生成${file_tableName}.csv"
- sql.eachRow(strSql,
- {
- result_columnCount=it.getColumnCount();
- println"*********${file_tableName}表结构**********"
- println":本次导出共生成${result_columnCount}个字段";
- for(iin1..result_columnCount){//不同与java,groovy下标从1开始
- printlnit.getColumnName(i)+"|"+it.getColumnTypeName(i);
- result_columnName<<it.getColumnName(i);
- result_columnType<<it.getColumnTypeName(i);
- }
- println"*********${file_tableName}表结构**********"
- file_csv<<result_columnName.join(",")+System.getProperty("line.separator");
- println"开始生成数据,请耐心等待......"
- },
- {
- rows_count++;
- result_rowsData=[];//清空对象
- for(jin0..result_columnCount-1)
- {
- if(result_columnType[j]=="VARCHAR2"||result_columnType[j]=="VARCHAR"){//针对VARCHAR类型进行处理,加上"号
- Stringstrtemp="";
- //先要判断是否含有中文,有中文就不加"号
- /*if(isChinaese(it[j]))
- {
- strtemp=it[j]
- }
- else
- {
- strtemp="\""+it[j]+"\"";
- }
- */
- strtemp="\""+it[j]+"\"";
- result_rowsData<<strtemp;
- }
- else//其他类型不做处理
- {
- result_rowsData<<it[j];
- }
- }
- file_csv<<result_rowsData.join(",")+System.getProperty("line.separator");
- }
- );
- println"${file_tableName}数据生成完毕(导出数据行数:${rows_count})\n"
然后再给这个groovy脚本写几个对应的shell\bat执行脚本
比如:
文件名:生成基站.bat
- groovyexport"select*fromshw.chal_cell_base_info"
如图:

那么当每次都要生成最新数据的时候,直接去双击这些bat文件即可.或者你直接把这些bat配置到操作系统的执行任务当中去即可.
本文介绍了一个使用Groovy编写的脚本,能够快速地从数据库中导出指定表的数据,并生成CSV文件。该脚本支持通过SQL语句指定导出范围,适用于定时任务批量处理场景。
712

被折叠的 条评论
为什么被折叠?



