【问题标题】:beanshell jdbc connection, class loadingbeanshell jdbc连接,类加载
【发布时间】:2012-02-08 00:56:06
【问题描述】:

我想在 beanshell 脚本中连接到一个 hsqldb。

我在加载类时遇到问题,我之前写过,已经回复了。

代码如下:

    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()) beanshell 需要什么来处理这段代码?

谢谢, 比拉尔

【问题讨论】:

  • 要排除一个和另一个,只用一个new org.hsqldb.jdbcDriver(); 行怎么样?
  • 我也发现了这个问题。我怀疑这与 DriverManager getConnection 方法将类加载器类名与已注册的类进行比较的方式有关。 DriverManager 类的加载逻辑看起来有点意思,里面有一个原生调用……

标签: jdbc beanshell


【解决方案1】:

我放弃了这个,没有办法动态加载 JDBC 类而不是其他类型的对象,相反,我现在使用 Runtime exec 来调用 DB 的命令行程序。另外,beanshell 有一个“exec()”方法。

幸运的是,我所需要的只是针对 DB 运行脚本,而不是实际与 DB 交互,所以这对我有用。

另外,JDBC 不会为您加载的原因是因为 Beanshell 有时会加载它自己的类加载器(而不是默认的类加载器)。如果您尝试在 Beanshell 脚本中动态加载 jar,则会发生这种情况。如果您将 jdbc.jar 放入 Javasoft/ext 目录,在这种情况下,我相信它会进入默认的类加载器。此外,如果您的 Beanshell 脚本足够小心not to trigger the new classloader,那也可以。换句话说,不要在脚本中调用“addClassPath”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2018-08-30
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多