为了账号安全,请及时绑定邮箱和手机立即绑定

两个类对​​ JDBC Driver 的看法不同

两个类对​​ JDBC Driver 的看法不同

慕桂英4014372 2021-11-17 15:46:58
我在一个目录中有两个类 - test 和 main。两者都必须通过 JDBC 驱动程序连接到数据库,该驱动程序通过 pom.xml 连接。这些类具有相同的连接设置,但测试类工作正常,主类抛出 ClassNotFoundException: com.mysql.jdbc.Driver。我尝试了不同版本的连接器,现在它是最新鲜的 (8.0.12)。我还尝试手动添加带有驱动程序的 jar 文件 - 这种情况重复出现。没有更多的想法。测试类:package app.model;import app.entities.StandartGame;import java.sql.*;import java.util.ArrayList;import java.util.List;import java.util.Properties;public class DBTest {private static final String USERNAME = "root";private static final String PASSWORD = "root";private static final String DATABASEURL = "jdbc:mysql://localhost:3306/test?serverTimezone=Europe/Moscow&useSSL=false";public static void main(String[] args) {    try {        Class.forName("com.mysql.cj.jdbc.Driver");        Connection connection = DriverManager.getConnection(DATABASEURL, USERNAME, PASSWORD);        Statement statement = connection.createStatement();        String thisName, thisGenre;        double thisPrice;        ResultSet resultSet = statement.executeQuery("select * from GameShop");        List<StandartGame> games = new ArrayList<StandartGame>();        while (resultSet.next()) {            thisPrice = resultSet.getDouble("price");            thisName = resultSet.getString("name");            thisGenre = resultSet.getString("genre");            StandartGame game = new StandartGame(thisName, thisPrice, thisGenre);            games.add(game);        }        for (StandartGame game: games) {            System.out.println(game.getName());        }    } catch (ClassNotFoundException e) {        e.printStackTrace();    } catch (SQLException e) {        e.printStackTrace();    }  }}
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

这几乎肯定与您配置代码的方式有关,而不是与代码本身有关。例外来自Class.forName和使用diff显示您引用的字符串相同(那里没有偷偷摸摸的同形文字或其他拼写错误)。

典型的方法是尝试仍然失败的最简单的事情。最小的、完整的和可验证的示例是本地堆栈溢出术语。

用这个替换你的整个示例代码应该仍然显示问题,而没有所有其他废话。您可以使用带有内联文字字符串的完全相同的代码,并在两者之间进行复制和粘贴,或者直接引用该类。

Class<?> driverClass = com.mysql.cj.jdbc.Driver.class;

(您可能必须首先更正 Java 源代码编译器的类路径。)通常可以通过直接构造驱动程序来代替。

java.sql.Driver driver = new com.mysql.cj.jdbc.Driver();

我们已将运行时错误转换为编译时错误。赢!好吧,在这种情况下,它可能会以链接时间错误告终。

无论如何,在转移之后,异常表明运行时类路径存在问题。这可能是pom.xml- MySQL 驱动程序必须在运行Web 应用程序的类路径中可见。

您可以将库类与 Web 应用程序代码一起部署。或者,还有其他标准位置可以将库放在 Web 容器中(请参阅您的文档),它们可以更广泛地共享,并在开发过程中重新部署正在运行的容器中时消除重新加载驱动程序的开销。JDBC 驱动程序只是 jars 中的类库(有些具有本机组件,但我相信现在这在很大程度上仅限于与本机接口的狡猾桥接)。


查看完整回答
反对 回复 2021-11-17
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信