2011-08-18 71 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(); 
}