zoukankan      html  css  js  c++  java
  • java调用kettle动态传参修改数据库连接

    感言:网络的确帮助了我们,但是kettle的资料真实太少,英语学好是有必要的;

    整体思路:创建javaproject→导入kettle所需要的包→实现kettle中的对象→重写对象内容→调用对象执行;

     1 package kettle;
     2 
     3 //需要导入的包
     4 import java.util.List;
     5 import java.util.Map;
     6 import java.util.Set;
     7 
     8 import org.pentaho.di.core.KettleEnvironment;
     9 import org.pentaho.di.core.database.DatabaseMeta;
    10 import org.pentaho.di.trans.Trans;
    11 import org.pentaho.di.trans.TransMeta;
    12 
    13 import com.enfo.common.utils.StringUtils;
    14 
    15 
    16 
    17 
    18 public class ExecuteLocalTran {
    19     /**
    20      * java调用本地的tran并且传递参数(包括给SQL传参和动态修改数据库连接)
    21      * 
    22      * 
    23      */
    24    public static void main(String arg[]) throws Exception 
    25     {
    26        
    27        //前台页面传递的参数
    28        String idname="7";//作为参数值
    29        String filename="./test.ktr";//ktr路径
    30        
    31        String conn_name="output_dbconnection";
    32        String host_name="128.8.28.124";
    33        String db_name="TestWork";
    34        String db_port="1433";
    35        String user_name="wxj";
    36        String pass_word="wxj1988";
    37        
    38        KettleEnvironment.init();//初始化kettle环境
    39        TransMeta transMeta = new TransMeta(filename);//new tran的源数据对象
    40        
    41        //DatabaseMeta dm =transMeta.getDatabase(1); 
    42        List<DatabaseMeta>  dmlist=transMeta.getDatabases();
    43        for(DatabaseMeta dm : dmlist)
    44            {
    45                 String connection_name=StringUtils.trimNull(dm.getName());
    46                 if(connection_name.equals(conn_name))
    47                 {   
    48                     dm.setHostname(host_name); //连接地址
    49                     dm.setDBName(db_name); //数据库名称
    50                     dm.setDBPort(db_port); //端口
    51                     dm.setUsername(user_name); //用户
    52                     dm.setPassword(pass_word); //密码
    53                     /*
    54                     System.out.println("DatabaseMeta:"+dm.getName());
    55                     System.out.println("AccessType:"+dm.getAccessType());
    56                     System.out.println("DatabaseName:"+dm.getDatabaseName());
    57                     System.out.println("Hostname:"+dm.getHostname());
    58                     System.out.println("Username:"+dm.getUsername());
    59                     System.out.println("Password:"+dm.getPassword());
    60                     */
    61                  }
    62                 
    63             }
    64        Trans trans = new Trans(transMeta);//创建tran对象
    65        trans.setVariable("namevalue",idname);//给对象传参
    66        trans.prepareExecution(null);//异常处理
    67        trans.startThreads();//开始执行
    68        trans.waitUntilFinished();//等待执行完毕
    69        if(trans.getErrors()!=0)
    70        {
    71            System.out.println("Error encountered!"); 
    72        }
    73     }
    74 
    75 }
    View Code

    更多参考:http://javadoc.pentaho.com/kettle/

    英文名:kingwang & Email :kingstudy@vip.qq.com
  • 相关阅读:
    阿里云如何跨账号打通,多账号同时享受优惠
    阿里云超长6个月免费套餐汇总
    零门槛申请阿里云1万元代金券
    阿里云包年包月服务器如何退款
    用户名密码注册与登录的应用
    Android 沉浸式状态栏完美解决方案
    Android开发支付集成——微信集成
    Android开发支付集成——支付宝集成
    ExpandableListView的完美实现,JSON数据源,右边自定义图片
    android扫描网页二维码进行网页登录
  • 原文地址:https://www.cnblogs.com/wxjnew/p/3082038.html
Copyright © 2011-2022 走看看