【问题标题】:cannot load jdbc driver (ClassNotFoundException)无法加载 jdbc 驱动程序 (ClassNotFoundException)
【发布时间】:2013-03-03 09:37:04
【问题描述】:

我正在尝试加载 JDBC 驱动程序以对我的 AS400 进行一些 SQL 调用。我尝试在安装了 JDBC 的计算机上运行连接,并且 URL 和 SQL 调用工作正常。

我需要开发一个没有安装驱动程序的应用程序(目前适用于 Android,但我们希望扩展到桌面应用程序)。我正在实际的 android 设备上测试代码,而不是模拟器,因此它具有完整的互联网权限。

jt400 的驱动程序位于 com.ibm.as400.access.AS400JDBCDriver 中,名称为 noted by IBM

这是我的代码:

    try {

        Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance();
        Connection conn = DriverManager.getConnection(
                url + schema + ";naming=sql;errors=full",
                uname,
                psswrd);

        // do SQL query stuff

        rs.close();
        stmt.close();
        conn.close();

    } 
    catch (ClassNotFoundException e)
    {
        this.basicOutput.setText("Class not found: " + e.getMessage());
        System.out.println(e.getStackTrace());
    }
    //catch (SQLException e)
    catch (Exception e)  //need generic to catch all errors thrown
    {

        this.basicOutput.setText(e.getMessage());
        System.out.println(e.getStackTrace());

    }

当我运行它时,我得到一个“找不到类:com.ibm.as400.access.AS400JDBCDriver”。

我进行了一些研究,结果表明 Class.forName 不是一个好方法。所以我也尝试了这个:

        DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());

但这也会产生同样的错误。

课程在那里。编译后的代码不会抛出任何语法错误,但由于某种原因,运行时找不到它。

我错过了什么?

【问题讨论】:

  • JDBC 不是已安装的。 jdbc Driver 是一个与数据库交互的类。运行应用程序时,您需要在类路径中包含该类(通常在 .jar 文件中)。
  • 我明白了。有没有办法包含它或从包含在项目中而不是类路径中的 .jar 加载它?
  • 您在项目的 libs 文件夹下包含 jar,然后将该 libs 文件夹添加到构建路径。按照此处的步骤操作:stackoverflow.com/questions/1334802/…
  • 我一遍又一遍:
  • 删除 Class.forName(),而你正在处理它。自 2007 年以来就不再需要它了。

标签: java android jdbc ibm-midrange


【解决方案1】:

我建议您使用 IBM 的 JTOpen Lite/JTLite 库,而不是您尝试使用的库,这些库专为在 Android 上使用而设计。

更多信息请见my answer to a related question

【讨论】:

  • 非常感谢您的文档!我已将驱动程序切换到加载的“com.ibm.jtopenlite.database.jdbc.JDBCDriver”。但是我收到“java.net.SockettimeOutException:连接超时”异常。我知道这个 URL 有效,因为我在 IBS Integrator 连接中使用了它(以及在 J2SE 中测试它时)。它是一个本地 IP,因为除非您远程访问 VPN,否则此服务器不会与网络外部的任何内容通信。我使用的是内部无线,而不是 3G 连接。这会以某种方式扰乱我的连接吗?
  • 这个异常在不查看整个程序的情况下很难调试。我建议在您知道可以从/连接到数据库的 PC 上开发一个测试程序。这将有助于确定是否是 URL 问题或其他问题的细节。
  • 该 URL 使用桌面 Java 程序运行良好。也许我可以以某种方式将我的代码发送给您。目前还没有太多内容。
  • 虽然我突然想到我在桌面上使用“jdbc:as400://IP”(这在移动设备上不起作用,我得到一个“错误的驱动程序”错误)和安卓,我使用“jdbc:jtopenlite://IP”
【解决方案2】:

驱动程序需要作为 jar 包包含在您的项目中。如果您已经拥有它,请将其添加到文件夹 /libs 中的项目中。

您将驱动程序类指定为字符串文字,因此在编译期间它通过并且您认为一切都很好。但是,在运行时它需要找到它,并且因为您没有包含 jar,所以它不能。

【讨论】:

  • jar 包含在我的项目库中。我已经通过将它包含在库引用以及 /libs 文件夹中来尝试它。还是找不到。
猜你喜欢
  • 1970-01-01
  • 2014-02-04
  • 2015-10-10
  • 2017-05-17
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多