利用groovy把表中数据导出成txt或csv

简介: 胶水语言就是胶水,写起也挺快的.这个脚本主要是从数据库中把表中的数据导出来生成文件.而不用每次都打开数据库编辑器去手工收集.
胶水语言就是胶水,写起也挺快的.这个脚本主要是从数据库中把表中的数据导出来生成文件.而不用每次都打开数据库编辑器去手工收集.然后结合强大的脚本(shell,bat)等基本就可以实现定时生成最新数据文本了.

目前这个groovy脚本只要输入sql语句,便会自动去反射表中的字段和类型.
脚本名称:export.groovy
  1. import groovy.sql.Sql;
  2. try
  3. {
  4. if(this.args.size()<1)
  5. {
  6.     println "格式错误!请参照下面的正确格式"
  7.     println "export [sql:可以正确执行的sql语句]"
  8.     return;
  9. }
  10. }
  11. catch (Exception e)
  12. {
  13.     println "格式错误!请参照下面的正确格式"
  14.     println "export [sql:可以正确执行的sql语句]"
  15.     return;
  16. }
  17. /*
  18. 连接对象
  19. 可以根据你自己的需要调整
  20. */
  21. sql = Sql.newInstance("jdbc:oracle:thin:@10.220.51.40:1521:ORA10G","用户名","密码","oracle.jdbc.driver.OracleDriver");
  22. /* SQL语句 可以根据自己需要调整*/
  23. strSql=this.args[0];
  24. //方法_获取表名
  25. def getTableName={strSql->
  26.  pattern= ~"FROM .*"
  27.  matcher = strSql.toUpperCase()  =~ pattern
  28.  tableName="";
  29.  while(matcher.find()){
  30.      tableName= matcher.group()
  31.  }
  32.  return tableName.split(' ')[1];
  33. }
  34. //方法判断字符串里面是否有中文
  35. def isChinaese={ str->  
  36.  if(str==null)
  37.      return;
  38.     
  39.  for (i in 0..str.size()-1)
  40.  {
  41.     if(str.charAt(i)>127)
  42.     {
  43.         return true;
  44.     }
  45.  } 
  46.   return false;
  47. }
  48. def file_tableName=getTableName(strSql);//表名
  49. def result_columnCount=0;//列数
  50. def result_columnName=[];//列名
  51. def result_columnType=[];//列类型
  52. def result_rowsData=[];//行数据
  53. def rows_count=0;
  54. //在该脚本的同级目录下生成已表名命名的csv文件
  55. file_csv= new File("${file_tableName}.txt");
  56. //判断文件是否存在,如果存在写删除
  57. if(file_csv.exists()){
  58. println "在当前目录下发现已经存在${file_tableName},程序已经删除文件"
  59.     file_csv.delete()
  60. }
  61. println "准备生成${file_tableName}.csv"
  62. sql.eachRow(strSql,
  63.     {
  64.         result_columnCount= it.getColumnCount();        
  65.         
  66.         println "*********${file_tableName}表结构**********"
  67.         println ":本次导出共生成${result_columnCount}个字段";
  68.         for (i in 1..result_columnCount){  //不同与java,groovy下标从1开始          
  69.             println    it.getColumnName(i) +"   |    "+ it.getColumnTypeName(i) ;   
  70.             result_columnName<<it.getColumnName(i);
  71.             result_columnType<<it.getColumnTypeName(i);           
  72.         }
  73.         println "*********${file_tableName}表结构**********"
  74.         file_csv<<result_columnName.join(",")+System.getProperty("line.separator"); 
  75.         
  76.         println "开始生成数据,请耐心等待......"
  77.     },
  78.     {
  79.         rows_count++;
  80.         result_rowsData=[]; //清空对象  
  81.         for (j in 0..result_columnCount-1)
  82.         {            
  83.             if(result_columnType[j]=="VARCHAR2" || result_columnType[j]=="VARCHAR"){ //针对VARCHAR类型进行处理,加上"号
  84.                  String strtemp="";
  85.                 //先要判断是否含有中文,有中文就不加"号
  86.            /*     if(isChinaese(it[j]))
  87.                 {
  88.                     strtemp=it[j]
  89.                 }
  90.                 else
  91.                 {
  92.                     strtemp="/""+it[j]+"/"";
  93.                 }      
  94.                 */
  95.                     strtemp="/""+it[j]+"/"";
  96.                  result_rowsData<<strtemp;
  97.             }
  98.             else //其他类型不做处理
  99.             {        
  100.                 result_rowsData<<it[j];
  101.             }
  102.         }
  103.  
  104.          file_csv<< result_rowsData.join(",")+System.getProperty("line.separator");
  105.     
  106.     }    
  107. );
  108. println "${file_tableName}数据生成完毕(导出数据行数:${rows_count})/n"


然后再给这个groovy脚本写几个对应的shell/bat执行脚本
比如:
文件名:生成基站.bat
  1. groovy export "select * from shw.chal_cell_base_info"

如图:



那么当每次都要生成最新数据的时候,直接去双击这些bat文件即可.或者你直接把这些bat配置到操作系统的执行任务当中去即可.


目录
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
csv文件导入mysql指定表中
csv文件导入mysql指定表中
|
9月前
|
Python
记录一次py中如何将excel中的数据导出到word中, 关键字导出
记录一次py中如何将excel中的数据导出到word中, 关键字导出
86 0
|
10月前
|
数据处理
R|批量循环处理同一格式文件-csv,txt,excel
R|批量循环处理同一格式文件-csv,txt,excel
|
11月前
|
数据处理 Python
多线程操作CSV文件并且将CSV文件转成XLSX文件
多线程操作CSV文件并且将CSV文件转成XLSX文件
156 0
|
存储 数据挖掘 数据库
|
关系型数据库 数据库 PostgreSQL
导出CSV文件
导出CSV文件
332 0
es数据导出csv文件
es数据导出csv文件
|
关系型数据库 MySQL 数据库
读取txt写入csv,读取csv写入mysql
用Python实现读取txt写入csv,读取csv写入mysql
251 0
读取txt写入csv,读取csv写入mysql
Groovy学习笔记(1)读取CSV文件
  本篇分享讲展示如何在Groovy中读取CSV文件。   我们要读取的CSV文件foo.csv的内容如下:   Groovy代码如下: //import packages import java.
2061 0