1

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)

ドキュメントには、存在する必要があると記載されています。

4

2 に答える 2

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();
 }
于 2011-08-18T20:39:06.947 に答える
1

http://beanshell.org/manual/classpath.html#Loading_Classes_Explicitlyドキュメントによると、ドライバーを選択するかロードするかは自由getClass( name )ですBshClassManager.classForName( name )// equivalentコメントにも注意してください。

おそらく、ドキュメンテーションは、 をBshClassManager適切に使用する方法の間違った例を示しているだけです。しかし、それは単なる「同等」であるため、それを完全に削除できます。はgetClass()問題なく動作するはずです。

于 2011-08-18T20:50:36.907 に答える