利用groovy把表中数据导出成txt或csv
2008-09-01 16:05
92 查看
胶水语言就是胶水,写起也挺快的.这个脚本主要是从数据库中把表中的数据导出来生成文件.而不用每次都打开数据库编辑器去手工收集.然后结合强大的脚本(shell,bat)等基本就可以实现定时生成最新数据文本了.
目前这个groovy脚本只要输入sql语句,便会自动去反射表中的字段和类型.
脚本名称:export.groovy
import groovy.sql.Sql;
try
{
if(this.args.size()<1)
{
println "格式错误!请参照下面的正确格式"
println "export [sql:可以正确执行的sql语句]"
return;
}
}
catch (Exception e)
{
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];
//方法_获取表名
def getTableName={strSql->
pattern= ~"FROM .*"
matcher = strSql.toUpperCase() =~ pattern
tableName="";
while(matcher.find()){
tableName= matcher.group()
}
return tableName.split(' ')[1];
}
//方法判断字符串里面是否有中文
def isChinaese={ str->
if(str==null)
return;
for (i in 0..str.size()-1)
{
if(str.charAt(i)>127)
{
return true;
}
}
return false;
}
def file_tableName=getTableName(strSql);//表名
def result_columnCount=0;//列数
def result_columnName=[];//列名
def result_columnType=[];//列类型
def result_rowsData=[];//行数据
def rows_count=0;
//在该脚本的同级目录下生成已表名命名的csv文件
file_csv= new File("${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 (i in 1..result_columnCount){ //不同与java,groovy下标从1开始
println it.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 (j in 0..result_columnCount-1)
{
if(result_columnType[j]=="VARCHAR2" || result_columnType[j]=="VARCHAR"){ //针对VARCHAR类型进行处理,加上"号
String strtemp="";
//先要判断是否含有中文,有中文就不加"号
/* 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
groovy export "select * from shw.chal_cell_base_info"
如图:
那么当每次都要生成最新数据的时候,直接去双击这些bat文件即可.或者你直接把这些bat配置到操作系统的执行任务当中去即可.
目前这个groovy脚本只要输入sql语句,便会自动去反射表中的字段和类型.
脚本名称:export.groovy
import groovy.sql.Sql;
try
{
if(this.args.size()<1)
{
println "格式错误!请参照下面的正确格式"
println "export [sql:可以正确执行的sql语句]"
return;
}
}
catch (Exception e)
{
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];
//方法_获取表名
def getTableName={strSql->
pattern= ~"FROM .*"
matcher = strSql.toUpperCase() =~ pattern
tableName="";
while(matcher.find()){
tableName= matcher.group()
}
return tableName.split(' ')[1];
}
//方法判断字符串里面是否有中文
def isChinaese={ str->
if(str==null)
return;
for (i in 0..str.size()-1)
{
if(str.charAt(i)>127)
{
return true;
}
}
return false;
}
def file_tableName=getTableName(strSql);//表名
def result_columnCount=0;//列数
def result_columnName=[];//列名
def result_columnType=[];//列类型
def result_rowsData=[];//行数据
def rows_count=0;
//在该脚本的同级目录下生成已表名命名的csv文件
file_csv= new File("${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 (i in 1..result_columnCount){ //不同与java,groovy下标从1开始
println it.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 (j in 0..result_columnCount-1)
{
if(result_columnType[j]=="VARCHAR2" || result_columnType[j]=="VARCHAR"){ //针对VARCHAR类型进行处理,加上"号
String strtemp="";
//先要判断是否含有中文,有中文就不加"号
/* 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
groovy export "select * from shw.chal_cell_base_info"
如图:
那么当每次都要生成最新数据的时候,直接去双击这些bat文件即可.或者你直接把这些bat配置到操作系统的执行任务当中去即可.
相关文章推荐
- 利用pig导出hbase文件为txt或者csv格式
- 将大数据利用 BCP 导出SqlServer数据到CSV
- php利用phpexcel插件实现数据的导入和导出(支持csv\xls\xlsx格式和超过26个字段列)
- Oracle 导出数据到Excel、CSV、TXT、HTMl
- SQL SERVER利用BCP命令在命令行下导出数据到csv文件中
- SQLite实用武器库(2)利用import命令导入导出数据到CSV文件
- mongodb怎样导出数据为csv或者txt格式
- 百万数据已CSV,Txt格式导出
- 利用vc实现数据表格导出到CSV文件
- GlacialList数据导入导出(txt与CSV)
- C# Winform实现数据的导出为txt或者CSV或者excel格式
- 利用utl_file将数据导出为csv文件 http://ningoo.itpub.net
- MongoDB 数据导出mongoexport(可导出为txt或csv)
- 利用MySQL Workbench导出MySQL创建的数据表关系图图文教程
- 从数据库导出数据到word、excel、.txt(一)
- 将SQlite中的数据以txt文件导出
- 利用python简化sql server数据导入导出
- php使用指定编码导出mysql数据到csv文件的方法
- mysql导出csv/sql/newTable/txt的方法,mysql的导入txt/sql方法........................................................
- C#导出数据到CSV和EXCEL文件,过长的数值被转义的解决方法