与Beanshell的JDBC连接

时间:2011-08-18 19:35:49

标签: java scripting jdbc beanshell

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表示它应该存在。

2 个答案:

答案 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()应该可以正常工作。