Java JDBC Mysql连接仅在try-catch内部工作

Java JDBC Mysql连接仅在try-catch内部工作,java,mysql,jdbc,intellij-idea,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中的项目库属性中注册 如果我尝试按下图进行连接,则会出现生成错误: Bu如果我将相同的代码放在try-catch块中,它可以正常工作,并且我可以毫无问题地查询数据库: 真的有必要将每个查询放在try-catch块中吗? 这是java想要的方法还是

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

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

如果我尝试按下图进行连接,则会出现生成错误:

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

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


谢谢

如果我们不确定代码是否会返回错误,通常我们会使用
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连接器
或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;

}
希望这能给你一个想法

您可以在此处了解更多信息:


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

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

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

您可以在java文档中找到这样的代码描述,如下图所示

您是否可以将错误包含在图像中,我看不到image@YCF_L确定:错误:(15,58)java:unreportedexception java.sql.SQLException;必须捕获或声明为thrown阅读Java教程中有关已检查异常的内容。就像方法签名需要参数和返回值才能具有特定类型一样,它的
抛出
异常列表需要处理特定类型的异常。这样,编译器会提醒您注意某些条件。@LewBloch谢谢您,作为初学者,我不知道检查和未检查的异常。发现这篇好文章:这帮助我完全理解了这种差异。现在一切都有意义了@不要忘记接受答案