2011-08-18 83 views
1

关于StackOverflow的其他类似问题没有回答我在这方面的问题。我有此脚本不工作了,我想知道如何得到它的工作:与Beanshell的JDBC连接

// beanshell script script.bsh 
import com.mysql.jdbc.Driver; 
import java.sql.Connection; 
name="com.mysql.jdbc.Driver"; 
c = getClass(name); 
c = BshClassManager.classForName(name); // equivalent 

而我得到的错误是:

// Debug: getResolvedMethod cache MISS: class bsh.BshClassManager - classForName 
// Debug: Searching for method: classForName(java.lang.String) in 'bsh.BshClassManager' 
// Debug: Looking for most specific method: classForName 
bsh.UtilEvalError: Cannot reach instance method: classForName(java.lang.String) from static context: bsh.BshClassManager 
     at bsh.Reflect.checkFoundStaticMethod(Unknown Source) 
     at bsh.Reflect.resolveJavaMethod(Unknown Source) 
     at bsh.Reflect.resolveExpectedJavaMethod(Unknown Source) 
     at bsh.Reflect.invokeStaticMethod(Unknown Source) 
     at bsh.Name.invokeMethod(Unknown Source) 
     at bsh.BSHMethodInvocation.eval(Unknown Source) 
     at bsh.BSHPrimaryExpression.eval(Unknown Source) 
     at bsh.BSHPrimaryExpression.eval(Unknown Source) 
     at bsh.BSHAssignment.eval(Unknown Source) 
     at bsh.Interpreter.eval(Unknown Source) 
     at bsh.Interpreter.source(Unknown Source) 
     at bsh.Interpreter.main(Unknown Source) 

documentation说,它应该存在。

+0

BshClassManager是一个类名,你喜欢使用的方法是一个实例方法,而不是静态方法。 –

+0

@Jochen:但文档告诉如此:http://www.beanshell.org/manual/classpath.html#Loading_Classes_Explicitly但是,根据该文档,'getClass()'应该足够了。 Djangofan:如果你只是删除那条违规线路怎么办? – BalusC

+0

@BalusC - 好的,删除脚本的最后一行确实有效。为什么文档没有提到这些? – djangofan

回答

0

按照http://beanshell.org/manual/classpath.html#Loading_Classes_Explicitly文件你可以自由选择任getClass(name)BshClassManager.classForName(name)加载驱动程序。还请注意// equivalent评论。

也许该文档只是给出了一个正确使用BshClassManager的错误示例。但因为它只是一个“等价物”,你可以完全删除它。 getClass()应该可以正常工作。

+0

好吧,看起来这意味着BshClassManager默认绑定到“默认”类加载器,因为它们被认为是“equivilant”?如果BshClassManager是一个'自定义'类加载器(不是默认的类加载器),这是我以前的想法,那么它们不会是平等的? – djangofan

1

由于BalusC,这是答案:

// debug(); 
// addClassPath("mysql-connector-java-5.1.15.jar"); 
import com.mysql.jdbc.Driver; 
import java.sql.Connection; 
import java.sql.DriverManager; 

System.out.println("MySQL Connect Example."); 
Connection conn = null; 
String url = "jdbc:mysql://localhost:3306/"; 
String dbName = "mydb"; 
String driver = "com.mysql.jdbc.Driver"; 
String userName = "root"; 
String password = "password"; 
try { 
    c = getClass(driver); 
    conn = DriverManager.getConnection(url+dbName,userName,password); 
    System.out.println("Connected to the database"); 
    conn.close(); 
    System.out.println("Disconnected from database"); 
} catch (Exception e) { 
    e.printStackTrace(); 
}