beanshell jdbc连接,类加载

beanshell jdbc连接,类加载,jdbc,beanshell,Jdbc,Beanshell,我想连接到beanshell脚本中的hsqldb 我在加载类时遇到了问题,我以前写过它,它得到了回复 代码如下所示: Connection conn = null; try { getClass("org.hsqldb.jdbcDriver").newInstance(); conn = DriverManager.getConnection("jdbc:hsqldb:file:C:/testdata/tdb","SA","")

我想连接到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还需要什么来处理这段代码

谢谢,
Bilal

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

幸运的是,我所需要的只是对DB运行脚本,而不是实际与DB交互,所以这对我来说是可行的


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

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

幸运的是,我所需要的只是对DB运行脚本,而不是实际与DB交互,所以这对我来说是可行的


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

要排除其中一个,只需一个
new org.hsqldb.jdbcDriver()如何行?我也发现了这个问题。我怀疑这与DriverManager getConnection方法将classloader类名与已注册的类进行比较的方式有关。DriverManager类加载逻辑看起来有点有趣,其中有一个本机调用……为了排除一个和另一个调用,只需一个
new org.hsqldb.jdbcDriver()如何行?我也发现了这个问题。我怀疑这与DriverManager getConnection方法将classloader类名与已注册的类进行比较的方式有关。DriverManager类加载逻辑看起来有点有趣,其中有一个本机调用。。。