利用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配置到操作系统的执行任务当中去即可.

时间: 2024-09-17 21:29:54

利用groovy把表中数据导出成txt或csv的相关文章

Oracle中数据导出成CVS,EXCEL

  我们可以把oracle数据库中的某个表导出成CVS,可用excel方式打开该文件.   步骤一 选中需要导出的数据,右击->导出结果->csv文件       步骤二 查看导出的文件     步骤三 你可以在csv中对数据进行你想要的操作了.如果你又新建结构相同的表a,右击a表->编辑数据(select * from a for update)->点击小锁解锁->复制需要的数据即可.别忘了把行号也要复制,因为也算一列.    

mysql中数据导出成excel文件语句

 代码如下 复制代码 mysql>select * from xi_table into outfile 'd:test.xls'; 导出为txt文件:  代码如下 复制代码 select * from xi_table into outfile 'd:test.txt'; 默认使用tab分割字段,记录使用n分割.可以自定义三个参数.  代码如下 复制代码 SELECT * FROMhx_9enjoy INTO OUTFILE '/tmp/9enjoy_hx.txt' FIELDS TERMIN

SQL表中数据按条件批量导出多个Excel文件

SQL Server表中数据按条件批量导出为多个Excel文件是本文我们主要要介绍的内容,在一次SQL Server数据库的操作中,需要将某个有数十万行数据的表按类别导出为xls文件,每个类别一个xls.将数据表中的数据导出并保存为xls简单,用 SSIS或者查询出来之后另存为都可以.但是,这个表中的分类有数百个,如果一个个用SSIS或者查询另存为的话,工作量巨大.前思后想,想到了用 while循环查询,并用bcp导出的方法. 下面是相关代码: --声明需要的变量 declare @sql va

利用php把mysql数据库备份导出成sql示例

用php代码实现数据库备份可以使网站的管理变得非常便捷,我们可以直接进后台操作就能完成数据库的备份. 关键技术: 1. 首先要得到该数据库中有哪些表,所用函数 mysql_list_tables(),然后可以将获取的所有表名存到一个数组. 2. show create table 表名 可以获取表结构. 3. select * from 表名 取出所有记录,用循环拼接成 insert into... 语句. 功能截图:   导出成的sql语句效果   具体代码:  代码如下 复制代码 <?php

看实例学VFP:利用多个表中的字段创建新表

本例中再来复习一下select语句中的inner join子句的知识,关于select语句请参考:select SQL 命令 或sql语言教程.本例的主要操作是在表单的init事件中完成的,在该事件中进行连接查询并将查询结果输出为一个临时表(该表包括了"人员信息表"的"姓名,性别,基本工资"3个字段以及"工资表"的"奖金,生活补助,养老保险"3个字段),最后将该表设为表格控件的数据源.本例应用到了数据环境,并使用"数

对Excel表中数据一对多查询的方法

  对Excel表中数据一对多查询的方法          举个例子,如下图,左侧A1:C10是一份学员名单表,现在需要根据F1单元格的"EH图班"这个指定的条件,在F2:F10单元格区域中,提取该班级全部学员名单. 今天说一个函数查询方面的方法:Index+Small. F2单元格输入以下数组公式,按住Ctrl+Shift键不放,再按回车键,然后向下填充: =INDEX(B:B,SMALL(IF(A$1:A$10=F$1,ROW($1:$10),4^8),ROW(A1))),&quo

c#-怎么用C#将数据库中的数据导出到txt中

问题描述 怎么用C#将数据库中的数据导出到txt中 我现在在sqlsever中有一个叫Phone的表,现在要用C#把它里面的数据导入到一个txt中. 求各位大大,给段代码让小弟学习一下~ 解决方案 http://www.jb51.net/article/35989.htm 解决方案二: C# 读取数据库,应该是没有什么问题的.具体要看你的数据库是什么! 将读到的数据写入文件,这个比较简单.只要注意写入的格式控制. 代码,要靠你自己写.只能给你思路! 解决方案三: 参考C#中从数据库导出至txt

在JSP页面点击浏览,选取EXCEL表格,点击导入能将表中数据保存到数据库里

问题描述 在JSP页面点击浏览,选取EXCEL表格,点击导入能将表中数据保存到数据库里 在JSP页面点击浏览,选取要保存的EXCEL表格,点击导入能将表中数据保存到MYSQL数据库里 环境用的是MVC +MYSQL 求源码!!!!!! 解决方案 参考Spring3 MVC + POI 实现 Excel与MySQL 的导入导出 解决方案二: 上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢!

用jdbc删除数据库表中数据失败

问题描述 用jdbc删除数据库表中数据失败 麻烦下谁能帮我看下哪出了问题 我怀疑是画红圈的那有问题 deleteShopping.jsp下面这张 数据库表 最后.. 我感觉是 解决方案 打个断点看下为什么失败,是不是book_id没取到 解决方案二: 你打印一下book_id的值,是不是目标数据.另外不要通过返回值判断是否成功.通常情况下,执行了,就认为删除了. 解决方案三: 通过JDBC获取数据库表元数据 解决方案四: 你这个是get方式传参 你把鼠标放到删除链接上面,页面的左下角会有url的