加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 16:59:03 所属栏目:大数据 来源:网络整理
导读:胶水语言就是胶水,写起也挺快的.这个脚本主要是从数据库中把表中的数据导出来生成文件.而不用每次都打开数据库编辑器去手工收集.然后结合强大的脚本(shell,bat)等基本就可以实现定时生成最新数据文本了. 目前这个groovy脚本只要输入sql语句,便会自动去反射表
胶水语言就是胶水,写起也挺快的.这个脚本主要是从数据库中把表中的数据导出来生成文件.而不用每次都打开数据库编辑器去手工收集.然后结合强大的脚本(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配置到操作系统的执行任务当中去即可.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读