利用groovy把表中資料匯出成txt或csv
阿新 • • 發佈:2019-01-06
膠水語言就是膠水,寫起也挺快的.這個指令碼主要是從資料庫中把表中的資料匯出來生成檔案.而不用每次都開啟資料庫編輯器去手工收集.然後結合強大的指令碼(shell,bat)等基本就可以實現定時生成最新資料文字了.
目前這個groovy指令碼只要輸入sql語句,便會自動去反射表中的欄位和型別.
指令碼名稱:export.groovy
然後再給這個groovy指令碼寫幾個對應的shell\bat執行指令碼
比如:
檔名:生成基站.bat
如圖:
那麼當每次都要生成最新資料的時候,直接去雙擊這些bat檔案即可.或者你直接把這些bat配置到作業系統的執行任務當中去即可.
目前這個groovy指令碼只要輸入sql語句,便會自動去反射表中的欄位和型別.
指令碼名稱:export.groovy
- importgroovy.sql.Sql;
- try
- {
- if(this.args.size()<1)
- {
- println"格式錯誤!請參照下面的正確格式"
- println"export[sql:可以正確執行的sql語句]"
- return;
- }
- }
- catch(Exceptione)
- {
- println"格式錯誤!請參照下面的正確格式"
- println"export[sql:可以正確執行的sql語句]"
- return;
- }
-
/*
- 連線物件
- 可以根據你自己的需要調整
- */
- sql=Sql.newInstance("jdbc:oracle:thin:@10.220.51.40:1521:ORA10G","使用者名稱","密碼","oracle.jdbc.driver.OracleDriver");
- /*SQL語句可以根據自己需要調整*/
- strSql=this.args[0];
- //方法_獲取表名
- defgetTableName={strSql->
- pattern=~"FROM.*"
- matcher=strSql.toUpperCase()=~pattern
- tableName="";
-
while(matcher.find()){
- tableName=matcher.group()
- }
- returntableName.split('')[1];
- }
- //方法判斷字串裡面是否有中文
- defisChinaese={str->
- if(str==null)
- return;
- for(iin0..str.size()-1)
- {
- if(str.charAt(i)>127)
- {
- returntrue;
- }
- }
- returnfalse;
- }
- deffile_tableName=getTableName(strSql);//表名
- defresult_columnCount=0;//列數
-
defresult_columnName=[];
- defresult_columnType=[];//列型別
- defresult_rowsData=[];//行資料
- defrows_count=0;
- //在該指令碼的同級目錄下生成已表名命名的csv檔案
- file_csv=newFile("${file_tableName}.txt");
- //判斷檔案是否存在,如果存在寫刪除
- if(file_csv.exists()){
- println"在當前目錄下發現已經存在${file_tableName},程式已經刪除檔案"
- file_csv.delete()
- }
- println"準備生成${file_tableName}.csv"
- sql.eachRow(strSql,
- {
- result_columnCount=it.getColumnCount();
- println"*********${file_tableName}表結構**********"
- println":本次匯出共生成${result_columnCount}個欄位";
- for(iin1..result_columnCount){//不同與java,groovy下標從1開始
- printlnit.getColumnName(i)+"|"+it.getColumnTypeName(i);
- result_columnName<<it.getColumnName(i);
- result_columnType<<it.getColumnTypeName(i);
- }
- println"*********${file_tableName}表結構**********"
- file_csv<<result_columnName.join(",")+System.getProperty("line.separator");
- println"開始生成資料,請耐心等待......"
- },
- {
- rows_count++;
- result_rowsData=[];//清空物件
- for(jin0..result_columnCount-1)
- {
- if(result_columnType[j]=="VARCHAR2"||result_columnType[j]=="VARCHAR"){//針對VARCHAR型別進行處理,加上"號
- Stringstrtemp="";
- //先要判斷是否含有中文,有中文就不加"號
- /*if(isChinaese(it[j]))
- {
- strtemp=it[j]
- }
- else
- {
- strtemp="\""+it[j]+"\"";
- }
- */
- strtemp="\""+it[j]+"\"";
- result_rowsData<<strtemp;
- }
- else//其他型別不做處理
- {
- result_rowsData<<it[j];
- }
- }
- file_csv<<result_rowsData.join(",")+System.getProperty("line.separator");
- }
- );
- println"${file_tableName}資料生成完畢(匯出資料行數:${rows_count})\n"
然後再給這個groovy指令碼寫幾個對應的shell\bat執行指令碼
比如:
檔名:生成基站.bat
- groovyexport"select*fromshw.chal_cell_base_info"
如圖:
那麼當每次都要生成最新資料的時候,直接去雙擊這些bat檔案即可.或者你直接把這些bat配置到作業系統的執行任務當中去即可.