使用 JDBC 时出现 MissingResourceException?

Posted

技术标签:

【中文标题】使用 JDBC 时出现 MissingResourceException?【英文标题】:MissingResourceException when using JDBC? 【发布时间】:2012-09-11 16:05:09 【问题描述】:

我以前多次使用 JDBC 没有任何问题,但由于某种原因,在我的新服务器上它无法正常工作。代码在我的主机上编译和运行良好,所有的库(包括 JDBC)都应该编译成我运行的单个 JAR。

基本代码:

try

    Class.forName("com.mysql.jdbc.Driver");

catch (ClassNotFoundException e)

    System.err.println("Cannot load driver...");
    e.printStackTrace();


try

    connection = DriverManager.getConnection("jdbc:mysql://localhost/dbname?user=dbuser&password=dbpass");
    statement = connection.createStatement();

catch (SQLException e)

    System.err.println("Cannot connect to database...");
    e.printStackTrace();

错误:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.mysql.jdbc.Util.stackTraceToString(Util.java:355)
    at com.mysql.jdbc.Util.<clinit>(Util.java:120)
    at com.mysql.jdbc.NonRegisteringDriver.parseURL(NonRegisteringDriver.java:764)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
    at java.sql.DriverManager.getConnection(DriverManager.java:620)
    at java.sql.DriverManager.getConnection(DriverManager.java:222)
    at com.test.Server.<init>(Server.java:78)
    at com.test.Server.main(Server.java:49)
Caused by: java.lang.RuntimeException: Can't load resource bundle due to underlying exception java.util.MissingResourceException: Can't find bundle for base name com.mysql.jdbc.LocalizedErrorMessages, locale en_GB
    at com.mysql.jdbc.Messages.<clinit>(Messages.java:61)
    ... 8 more
Caused by: java.util.MissingResourceException: Can't find bundle for base name com.mysql.jdbc.LocalizedErrorMessages, locale en_GB
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1539)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1278)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:733)
    at com.mysql.jdbc.Messages.<clinit>(Messages.java:59)
    ... 8 more

我以前从未遇到过这种错误,而且 Google 也没有提供任何帮助。我已经检查了数据库凭据、端口号等。如果有任何帮助,我将不胜感激!

【问题讨论】:

它看起来像驱动程序或类加载问题。 MySQL 正在寻找一个包含其国际化错误消息的包,但找不到它(尽管它应该与驱动程序类捆绑在同一个 jar 中)。你是如何构建你的单个 jar 并运行它的? 我正在使用 NetBeans。我已修改 build.xml 以构建我正在使用的 .jar 库。 我不了解 Netbeans,这并不能告诉我 jar 是如何构建的。它是否包含一个名为 com/mysql/jdbc/LocalizedErrorMessages.class 的文件,还是一个名为 com/mysql/jdbc/LocalizedErrorMessages.properties 的文件? 啊哈!编译的 JAR 中缺少 LocalizedErrorMessages.properties 文件。我相信 build.xml 设置为仅包含以 .class 结尾的文件。我已经更改了构建过程以包含所有内容,现在一切正常。谢谢! @Rsaesha 您能否将您的解决方案添加为答案并接受它?谢谢! 【参考方案1】:

替换..

connection = DriverManager.getConnection("jdbc:mysql://localhost/dbname?user=dbuser&password=dbpass");

..bcoz 的默认端口是 mysql 的 3306。如果更改,请给出

DriverManager.getConnection("jdbc:mysql://localhost:3306/minebench", "username", "password"); 

并添加“mysql-connector-java-5.1.0-bin.jar”。 那就试试吧。

【讨论】:

以上是关于使用 JDBC 时出现 MissingResourceException?的主要内容,如果未能解决你的问题,请参考以下文章

使用 mysql 运行 JDBC 程序时出现此错误 [重复]

使用 JDBC 驱动程序执行 Sql 查询时出现 NetworkOnMainThreadException

使用 JDBC 访问远程 MySQL 数据库时出现 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

尝试登录时出现 JDBC 异常

使用 JDBC 获取与 MySQL 的连接时出现“连接过多”

使用 JDBC 写入编写 AWS Glue DynamicFrame 时出现 PostreSQL 枚举问题