2010-09-30 67 views
1

我想連接到beanshell腳本中的hsqldb。beanshell jdbc連接,類加載

我在加載類時遇到了問題,我之前寫過它,並且回覆了它。

的代碼看起來像這樣:

Connection conn = null; 

    try { 
      getClass("org.hsqldb.jdbcDriver").newInstance(); 
      conn = DriverManager.getConnection("jdbc:hsqldb:file:C:/testdata/tdb","SA",""); 
      System.out.println("Connection established"); 
    } 

,我收到此錯誤:

java.sql.SQLException: No suitable driver found for jdbc:hsqldb:file:C:/testdata/tdb 

,我試圖太準驅動器,但我沒有工作

DriverManager.register(getClass("org.hsqldb.jdbcDriver").newInstance()) 

此代碼在java中已經工作(而不是使用Class.forName()的getClass()) bean地獄需要工作這個代碼?

感謝, 比拉爾

+0

排除一個和其他,只是一個新的org.hsqldb.jdbcDriver();行? – BalusC 2010-09-30 16:27:32

+0

我也發現了這個問題。我懷疑這是與DriverManager getConnection方法將類加載器類名稱與已註冊的類進行比較的方式有關的。 DriverManager類加載邏輯看起來有點有趣,在那裏有一個本地調用... – gencoreoperative 2012-02-07 09:50:20

回答

1

我放棄了這一點,有沒有辦法動態加載JDBC類,而不是其他類型的對象,相反,我現在使用Runtime中的exec調用命令行程序DB。另外,beanshell有一個「exec()」方法。

幸運的是,我所需要的只是針對數據庫運行腳本,而不是實際與數據庫交互,所以這對我很有用。

此外,JDBC不加載的原因是因爲Beanshell有時會加載自己的類加載器(而不是默認的類加載器)。特別是如果您嘗試在Beanshell腳本中動態加載JAR,會發生這種情況。如果將jdbc.jar放入Javasoft/ext目錄中,那麼我相信它會進入默認的類加載器。另外,如果您的Beanshell腳本足夠小心not to trigger the new classloader,那也可以。換句話說,不要在腳本中調用「addClassPath」等等。