StackOverflow上的其他类似问题没有回答我在这方面的问题。我有这个不起作用的脚本,我想知道如何让它工作:
// 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 :(得分: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();
}
答案 1 :(得分:0)
根据http://beanshell.org/manual/classpath.html#Loading_Classes_Explicitly文档,您可以自由选择getClass( name )
或BshClassManager.classForName( name )
来加载驱动程序。另请注意// equivalent
评论。
也许文档只是给出了如何正确使用BshClassManager
的错误示例。但由于它只是一个“等价物”,你可以完全删除它。 getClass()
应该可以正常工作。