Java JDBC Mysql连接仅适用于try catch

时间:2017-02-05 08:00:34

标签: java mysql jdbc intellij-idea

我开始学习java(经过多年的PHP)并且我很难尝试理解这种java行为。

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

如果我尝试连接如下图所示,我遇到了构建错误: connection-error

如果我在try catch块中放入相同的代码,它可以正常工作,我可以查询数据库没有问题: enter image description here

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

由于

2 个答案:

答案 0 :(得分:4)

一般情况下,如果我们不确定代码是否会返回错误,我们会使用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?

答案 1 :(得分:2)

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

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

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

您可以在java-docs上找到此类代码说明,例如https://docs.oracle.com/javase/7/docs/api/java/sql/DriverManager.html