java - USER 在 pentaho 数据集成中定义了 java 类步骤

标签 java mysql jdbc pentaho

  • 你好,

    我在用户定义的 JAVA 类中使用以下代码:

     //STEP 1. Import required packages import java.sql.*;  
    import  org.pentaho.di.core.database.*;
      public class JDBCExample  {    
    // JDBC driver name and database URL      
      static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
          static final String DB_URL ="jdbc:mysql://localhost:1111/mysql";
    
     //  Database credentials    
           static final String USER = "USER"; 
           static final String PASS = "PASS";
         public static void main(String[] args) {    
         Connection conn = null;    
         Statement stmt = null;    try{
        //STEP 2: Register JDBC driver
        Class.forName("com.mysql.jdbc.Driver");
    
    
     //STEP 3: Open a connection
     System.out.println("Connecting to a selected database...");
     conn = DriverManager.getConnection(DB_URL, USER, PASS);
     System.out.println("Connected database successfully...");
    
     //STEP 4: Execute a query
     System.out.println("Creating statement...");
     stmt = conn.createStatement();
    
     String sql = "select id,sorname,src_databasetype,src_databasename from table";
     ResultSet rs = stmt.executeQuery(sql);
     //STEP 5: Extract data from result set
     while(rs.next()){
        //Retrieve by column name
        int id  = rs.getInt("id");
        String sorname = rs.getString("sorname");
        String src_databasetype = rs.getString("src_databasetype");
        String src_databasename = rs.getString("src_databasename");
    
        //Display values
        System.out.print("ID: " + id);
        System.out.print(", sorname: " + sorname);
        System.out.print(", src_databasetype: " + src_databasetype);
        System.out.println(", src_databasename: " + src_databasename);
     }
     rs.close();    }catch(SQLException se){
     //Handle errors for JDBC
     se.printStackTrace();    }catch(Exception e){
     //Handle errors for Class.forName
     e.printStackTrace();    }finally{
     //finally block used to close resources
     try{
        if(stmt!=null)
           conn.close();
     }catch(SQLException se){
     }// do nothing
     try{
        if(conn!=null)
           conn.close();
     }catch(SQLException se){
        se.printStackTrace();
     }//end finally try    }//end try    System.out.println("Goodbye!"); }//end main }//end JDBCExample 
    

    通过命令提示符运行代码工作正常

    但是单独运行步骤(在 PDI 中)时出现错误: 非抽象类“Processor”必须实现方法“boolean org.pentaho.di.trans.steps.userdefinedjavaclass.TransformClassBase.processRow(org.pentaho.di.trans.step.StepMetaInterface, org.pentaho.di.trans.step.StepDataInterface) 抛出 org.pentaho.di.core.exception.KettleException”

最佳答案

对于 UDJC,我认为与其将代码放在 main 方法中,不如将其放在 processRow() 中。

而不是使用 - public static void main(String[] args) 使用 - public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) 抛出 KettleException

我仍然怀疑它是否还能正常工作,因为我不明白你想用这些代码做什么。

关于java - USER 在 pentaho 数据集成中定义了 java 类步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22626980/

相关文章:

java - JDBCTemplate默认使用连接池吗?

java - 为什么我不断收到此空指针未知源错误?

java - 调用另一个类中的方法并存储返回的列表

java - 在 IntelliJ IDEA 中运行单个 Junit 测试

Java警告/禁止特定包中的方法

mysql - Codeigniter 计算具有不同值的行

javascript - HTML 表单输入 javascript 自动求和 支付总价

java - 64位的java可以和32位的tomcat一起使用吗

MySQL克隆一个表,修剪一些数据,然后热交换它们的名称

java - 找不到驱动程序