我开始学习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的预期方法还是我做错了什么?
由于
答案 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;
}
希望这会给你一个想法。
您可以在此处了解详情:
答案 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