【问题标题】:Java JDBC Mysql connection only works inside try catch [duplicate]Java JDBC Mysql连接仅适用于try catch [重复]
【发布时间】:2017-06-22 07:57:40
【问题描述】:

我开始学习 java(在多年的 PHP 之后),我很难理解这种 java 行为。

我使用 jdk-8u121-macosx-x64 和 mysql-connector-java-5.1.40-bin.jar 在 Intellij Idea 2016.3 CE 项目的库属性中注册。

如果我尝试如下图所示连接,则会出现构建错误:

如果我将相同的代码放在 try catch 块中,它可以正常工作,我可以毫无问题地查询数据库:

真的有必要把每个查询都放在一个try catch块中吗? 这是java的预期方法还是我做错了什么?

谢谢

【问题讨论】:

  • 你能把你的错误包含在图片中吗,我看不到图片
  • @YCF_L 确定:错误:(15, 58) java: 未报告的异常 java.sql.SQLException;必须被抓住或宣布被抛出
  • 阅读有关检查异常的 Java 教程。就像方法签名要求参数和返回值具有某些类型一样,throws 异常列表需要处理某些类型的异常。这样编译器会提醒您注意某些条件。
  • @LewBloch 谢谢,作为初学者,我不知道检查和未检查的异常。找到这篇好文章:link,它帮助我完全理解了这种差异。现在一切都说得通了!
  • @RDev 不要忘记接受答案

标签: java mysql jdbc intellij-idea


【解决方案1】:

如果我们不确定我们的代码是否会返回错误,通常我们使用try{}catch(){},例如这里的代码:

try {
    Class.forName("com.mysql.jdbc.Driver");
    java.sql.Connection con = DriverManager.getConnection(DB_URL, DB_username, DB_password);
    return con;

} catch (ClassNotFoundException | SQLException e) {
    System.out.println("Exception " + e);
    return null;
}

考虑到您的 JDBC connector 或 SQL 查询中存在问题,因此我们会在 catch 中捕获错误

}(ClassNotFoundException | SQLException e) {
    //catch error
}

如果你不想使用 try catch,你可以像这样抛出它:

public Connection getConnection() throws ClassNotFoundException, SQLException {
    //------------------------------------------------^------------^--
    Class.forName(driver);
    java.sql.Connection con = DriverManager.getConnection(DB_URL, DB_username, DB_password);
    return con;

}

希望这能给你一个想法。

您可以在这里了解更多信息:

Catching and Handling Exceptions

How should I use try-with-resources with JDBC?

【讨论】:

    【解决方案2】:

    在红线部分有一个气球,上面写着未处理的异常 为了解决这个问题,您可以按 Alt+Enter 并将 throws 表达式添加到您的主方法签名中,或者使用 try/catch 部分将其抛出。

    您调用它的方法(DriverManager.getConnection(...)) 在其签名中有一个 throws,因此您必须能够通过您的方法抛出它:

    public static Connection getConnection(String url,
                       Properties info)
                                throws SQLException
    

    您可以在类似 https://docs.oracle.com/javase/7/docs/api/java/sql/DriverManager.html 的 java-docs 上找到此类代码描述

    【讨论】:

      猜你喜欢
      • 2016-03-21
      • 2018-09-10
      • 2013-09-10
      • 1970-01-01
      • 2012-05-14
      • 2023-01-25
      • 2022-01-08
      • 2017-09-22
      • 1970-01-01
      相关资源
      最近更新 更多