当我学习编程语言时,老师说我必须初始化,否则空指针会出错。当我设置JDBC
连接数据库时,Intelij IDEA
给出建议在ResultSet
变量的定义初始化为null时初始化是多余的。为什么没有其他出现?有时建议将一个陈述分成两个句子。初始化,分配。
public List<Message> getMesssages()
{
Connection conn = null;
Statement statement = null;
ResultSet result = null;
SQLException ex = null;
List<Message> messages = null;
try
{
conn = DriverManager.getConnection(jdbcUrl, username, password);
statement = conn.createStatement();
result = statement.executeQuery("SELECT * FROM departments");
messages = new ArrayList<Message>();
while (result.next()){
Message message = new Message();
message.setDept_no(result.getString("dept_no"));
message.setDept_name(result.getString("dept_name"));
messages.add(message);
}
} catch (SQLException e) {
ex = e;
} finally {
if (statement != null){
try {
statement.close();
} catch (SQLException e) {
if (ex == null){
ex = e;
}
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
if (ex == null){
ex = e;
}
}
}
if (ex != null){
throw new RuntimeException(ex);
}
}
return messages;
}
我看了他的建议,但仍然不明白
答案 0 :(得分:2)
IDE告诉您,ResultSet result
无法在您的代码中未初始化并使用。但是在某些情况下可能无法初始化其他变量,因此您必须将默认值设置为null
。
P.S。让我提供此代码的另一种方法。我认为这可能更具可读性,并且没有自动关闭资源的问题:
public List<Message> getMesssages() throws SQLException {
try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password);
Statement statement = conn.createStatement()) {
ResultSet result = statement.executeQuery("SELECT * FROM departments");
List<Message> messages = new ArrayList<>();
while (result.next()) {
Message message = new Message();
message.setDept_no(result.getString("dept_no"));
message.setDept_name(result.getString("dept_name"));
messages.add(message);
}
return messages;
}
}