利用groovy把表中数据导出成txt或csv
Posted zhangjianying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用groovy把表中数据导出成txt或csv相关的知识,希望对你有一定的参考价值。
胶水语言就是胶水,写起也挺快的.这个脚本主要是从数据库中把表中的数据导出来生成文件.而不用每次都打开数据库编辑器去手工收集.然后结合强大的脚本(shell,bat)等基本就可以实现定时生成最新数据文本了.
目前这个groovy脚本只要输入sql语句,便会自动去反射表中的字段和类型.
脚本名称:export.groovy
然后再给这个groovy脚本写几个对应的shell/bat执行脚本
比如:
文件名:生成基站.bat
如图:
那么当每次都要生成最新数据的时候,直接去双击这些bat文件即可.或者你直接把这些bat配置到操作系统的执行任务当中去即可.
目前这个groovy脚本只要输入sql语句,便会自动去反射表中的字段和类型.
脚本名称:export.groovy
- import groovy.sql.Sql;
- try
- {
- if(this.args.size()<1)
- {
- println "格式错误!请参照下面的正确格式"
- println "export [sql:可以正确执行的sql语句]"
- return;
- }
- }
- catch (Exception e)
- {
- 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];
- //方法_获取表名
- def getTableName={strSql->
- pattern= ~"FROM .*"
- matcher = strSql.toUpperCase() =~ pattern
- tableName="";
- while(matcher.find()){
- tableName= matcher.group()
- }
- return tableName.split(' ')[1];
- }
- //方法判断字符串里面是否有中文
- def isChinaese={ str->
- if(str==null)
- return;
- for (i in 0..str.size()-1)
- {
- if(str.charAt(i)>127)
- {
- return true;
- }
- }
- return false;
- }
- def file_tableName=getTableName(strSql);//表名
- def result_columnCount=0;//列数
- def result_columnName=[];//列名
- def result_columnType=[];//列类型
- def result_rowsData=[];//行数据
- def rows_count=0;
- //在该脚本的同级目录下生成已表名命名的csv文件
- file_csv= new File("${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 (i in 1..result_columnCount){ //不同与java,groovy下标从1开始
- println it.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 (j in 0..result_columnCount-1)
- {
- if(result_columnType[j]=="VARCHAR2" || result_columnType[j]=="VARCHAR"){ //针对VARCHAR类型进行处理,加上"号
- String strtemp="";
- //先要判断是否含有中文,有中文就不加"号
- /* 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
- groovy export "select * from shw.chal_cell_base_info"
如图:
那么当每次都要生成最新数据的时候,直接去双击这些bat文件即可.或者你直接把这些bat配置到操作系统的执行任务当中去即可.
以上是关于利用groovy把表中数据导出成txt或csv的主要内容,如果未能解决你的问题,请参考以下文章