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

本文介绍了一个使用Groovy编写的脚本,能够快速地从数据库中导出指定表的数据,并生成CSV文件。该脚本支持通过SQL语句指定导出范围,适用于定时任务批量处理场景。
胶水语言就是胶水,写起也挺快的.这个脚本主要是从数据库中把表中的数据导出来生成文件.而不用每次都打开数据库编辑器去手工收集.然后结合强大的脚本(shell,bat)等基本就可以实现定时生成最新数据文本了.

目前这个groovy脚本只要输入sql语句,便会自动去反射表中的字段和类型.
脚本名称:export.groovy
  1. importgroovy.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(Exceptione)
  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. defgetTableName={strSql->
  26. pattern=~"FROM.*"
  27. matcher=strSql.toUpperCase()=~pattern
  28. tableName="";
  29. while(matcher.find()){
  30. tableName=matcher.group()
  31. }
  32. returntableName.split('')[1];
  33. }
  34. //方法判断字符串里面是否有中文
  35. defisChinaese={str->
  36. if(str==null)
  37. return;
  38. for(iin0..str.size()-1)
  39. {
  40. if(str.charAt(i)>127)
  41. {
  42. returntrue;
  43. }
  44. }
  45. returnfalse;
  46. }
  47. deffile_tableName=getTableName(strSql);//表名
  48. defresult_columnCount=0;//列数
  49. defresult_columnName=[];//列名
  50. defresult_columnType=[];//列类型
  51. defresult_rowsData=[];//行数据
  52. defrows_count=0;
  53. //在该脚本的同级目录下生成已表名命名的csv文件
  54. file_csv=newFile("${file_tableName}.txt");
  55. //判断文件是否存在,如果存在写删除
  56. if(file_csv.exists()){
  57. println"在当前目录下发现已经存在${file_tableName},程序已经删除文件"
  58. file_csv.delete()
  59. }
  60. println"准备生成${file_tableName}.csv"
  61. sql.eachRow(strSql,
  62. {
  63. result_columnCount=it.getColumnCount();
  64. println"*********${file_tableName}表结构**********"
  65. println":本次导出共生成${result_columnCount}个字段";
  66. for(iin1..result_columnCount){//不同与java,groovy下标从1开始
  67. printlnit.getColumnName(i)+"|"+it.getColumnTypeName(i);
  68. result_columnName<<it.getColumnName(i);
  69. result_columnType<<it.getColumnTypeName(i);
  70. }
  71. println"*********${file_tableName}表结构**********"
  72. file_csv<<result_columnName.join(",")+System.getProperty("line.separator");
  73. println"开始生成数据,请耐心等待......"
  74. },
  75. {
  76. rows_count++;
  77. result_rowsData=[];//清空对象
  78. for(jin0..result_columnCount-1)
  79. {
  80. if(result_columnType[j]=="VARCHAR2"||result_columnType[j]=="VARCHAR"){//针对VARCHAR类型进行处理,加上"号
  81. Stringstrtemp="";
  82. //先要判断是否含有中文,有中文就不加"号
  83. /*if(isChinaese(it[j]))
  84. {
  85. strtemp=it[j]
  86. }
  87. else
  88. {
  89. strtemp="\""+it[j]+"\"";
  90. }
  91. */
  92. strtemp="\""+it[j]+"\"";
  93. result_rowsData<<strtemp;
  94. }
  95. else//其他类型不做处理
  96. {
  97. result_rowsData<<it[j];
  98. }
  99. }
  100. file_csv<<result_rowsData.join(",")+System.getProperty("line.separator");
  101. }
  102. );
  103. println"${file_tableName}数据生成完毕(导出数据行数:${rows_count})\n"


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

如图:



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


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值