2014-03-25 49 views
0
  • 嗨,用戶定義的Java類的步驟

    我使用下面的代碼在用戶定義的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.pent aho.di.trans.steps.userdefinedjavaclass.TransformClassBase.processRow(org.pentaho.di.trans.step.StepMetaInterface, org.pentaho.di.trans.step.StepDataInterface)拋出 org.pentaho.di.core.exception .KettleException」

+0

錯誤不是來自您在過帳中顯示的代碼段。但是在一個名爲'Processor'的類中,我相信它來自同一個包org.pentaho.di.trans.steps.userdefinedjavaclass。它沒有實現從父類繼承的抽象方法processRow。 –

+0

我應該怎麼做......我沒有使用processRow – user3374000

+0

但是,當你擴展父處理器抽象類時,你必須**從父類實現所有抽象方法*,至少使用默認功能。 –

回答

2

對於UDJC,我想,而不是把代碼中的主要方法,你需要把它放在processRow()。

而不是使用 - 公共靜態無效的主要(字串[] args) 使用 - 公共布爾processRow(StepMetaInterface SMI,StepDataInterface SDI)拋出KettleException

我仍然持懷疑態度,如果它仍然會作爲工作我不明白你想用這個代碼做什麼。