RJDBC和Class.forName违规

时间:2015-10-14 11:56:05

标签: java r javafx-2 javassist

我使用包rJava在Java中使用R编程。

使用RJDBC使用以下代码连接R中的数据库:

library(RJDBC) 
driverName = "oracle.jdbc.driver.OracleDriver";
clapath = "D:\\Test\\lib\\External DB\\ojdbc6.jar";
databaseName = "jdbc:oracle:thin:@hostName:portnumber:databasename";
userName = "username";
password = "password";

drv <- JDBC(driverName,clapath,identifier.quote="`")
dbUnloadDriver(drv)

我使用Java assit动态加载类来调用RScript。遵守守则。

//1st Java Assis Code
String classFile4Decrypt = "D:\\Java\\pre\\Controller.class";

  InputStream inputstream = new FileInputStream(classFile4Decrypt);
  ClassPool classPoolObj = ClassPool.getDefault();
  CtClass ctClassObj = classPoolObj.makeClass(inputstream);
  ctClassObj.setName("ScriptMethodConfig_001");
  ctClassObj.toClass();
  inputstream.close();

  Class<?> scriptFileMethodClass =  Class.forName(ctClassObj.getName());//loaderObj.loadClass(ctClassObj.getName());
   Class[] argTypes = new Class[1];
   argTypes[0] = String.class;
   String methodName = "testOB";
   Object[] parameters = new Object[1];
   parameters[0] = "Jayaramu";

  Method scriptGenricMethod = scriptFileMethodClass.getMethod(methodName, argTypes);
  System.out.println("Method Name: "+scriptGenricMethod.getName());
  scriptGenricMethod.invoke(scriptFileMethodClass.newInstance(), parameters);

  ctClassObj.freeze();
  ctClassObj.defrost();
  ctClassObj.detach();

//2nd Java Assis Code

ClassPool classPoolObj123 = ClassPool.getDefault();
  classFile4Decrypt = "D:\\Java\\pre\\Controller.class";
  inputstream = new FileInputStream(classFile4Decrypt);
  CtClass ctClassObj123 = classPoolObj123.makeClass(inputstream);
  ctClassObj123.setName("ScriptMethodConfig_002");
  ctClassObj123.toClass();
  inputstream.close();
  System.out.println(ctClassObj123.getName());
  scriptFileMethodClass =  Class.forName(ctClassObj123.getName());

从controller.class我调用RScript文件 错误是 - 在第二个Java助手代码Class.forName(&#34; ScriptMethodConfig_002&#34;)。抛出类未找到错误。如果我删除R脚本它的工作正常。为什么会这样?有没有解决方案。

0 个答案:

没有答案