利用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月前
|
索引 Python
python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据
该文档详细介绍了如何使用Python的Pandas库处理图像数据集,并将其保存为CSV文件。示例数据集位于`test_data`目录中,包含5张PNG图片,每张图片名中的数字代表其标签。文档提供了将这些数据转换为CSV格式的具体步骤,包括不同格式的数据输入方法(如NumPy数组、嵌套列表、嵌套元组和字典),以及如何使用`pd.DataFrame`和`to_csv`方法保存数据。此外,还展示了如何读取CSV文件并访问其中的每一行和每一列数据,包括获取列名、指定列数据及行数据的操作方法。
52 1
|
6月前
|
Python
python_读写excel、csv记录
python_读写excel、csv记录
50 0
|
3月前
|
存储 Python
使用CSV模块读取CSV文件--含代码
使用CSV模块读取CSV文件--含代码
25 0
|
3月前
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
68 0
|
6月前
|
XML JSON 数据处理
C# | 导出DataGridView中的数据到Excel、CSV、TXT
从DataGridView中导出数据到Excel、CSV、TXT是开发中非常常见的一种需求。本文将讲解如何高效的完成对这三种格式的单向导出。 倘若直接写三种格式的导出必定会产生大量的重复代码,而从表中获取结构化数据的思路是基本一致的,因此有一个思路是先将DataGridView中的数据转换为DataTable对象,再进一步导出成我们的目标格式。 本文将介绍如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。
511 0
C# | 导出DataGridView中的数据到Excel、CSV、TXT
|
Python
记录一次py中如何将excel中的数据导出到word中, 关键字导出
记录一次py中如何将excel中的数据导出到word中, 关键字导出
115 0
python 读取 .csv/.xlsx/.xls 文件数据—批量修改文件名
python 读取 .csv/.xlsx/.xls 文件数据—批量修改文件名
|
数据处理
R|批量循环处理同一格式文件-csv,txt,excel
R|批量循环处理同一格式文件-csv,txt,excel
112 0
|
数据处理 Python
多线程操作CSV文件并且将CSV文件转成XLSX文件
多线程操作CSV文件并且将CSV文件转成XLSX文件
225 0
|
关系型数据库 数据库 PostgreSQL
导出CSV文件
导出CSV文件
376 0