思路:在kettle中通过设置自定义常数来获取java脚本的值,在kettle的libswt\win64目录下放入用到的含有java.sql中的类的jar包rt.jar, 在 java脚本中像正常java一样写代码连接数据库。可惜这样查询到的结果会将之前的结果给覆盖,需要再做处理。
整的流程:
自定义常量数据:
java代码:import java.sql.*;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
if (first)
{
first = false;
}
String urlString = get(Fields.In, "urlString").getString(r);
String driverName = get(Fields.In, "driverName").getString(r);
String usernameString = get(Fields.In, "usernameString").getString(r);
String passwString = get(Fields.In, "passwString").getString(r);
PreparedStatement pst = null;
ResultSet rs = null;
try {
Class.forName(driverName);
Connection dbconConnection = DriverManager.getConnection(urlString,usernameString,passwString);
String sqlString = "select * from tes";
pst = dbconConnection.prepareStatement(sqlString);
rs = pst.executeQuery();
while (rs.next()) {
String s = rs.getString(1);
String s2 = rs.getString(2);
get(Fields.In, "id").setValue(r, s);
get(Fields.In, "nm").setValue(r, s2);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
putRow(data.outputRowMeta, r);
return true;
}
java代码部分截图:
写日志:
kettle里jar包截图: