【发布时间】:2012-08-07 18:36:58
【问题描述】:
我是 java 新手,但我很快就学会了。我一直遇到的一件事是我最终拥有一个充满查询和一般代码的函数,我想将它分解为单独的函数。以此为例:
public ResultSet getApples (){
ResultSet rs;
try{
PreparedStatement stmt = con.prepareStatement("SELECT * FROM fruit WHERE type='apples'");
rs = stmt.executeQuery();
} catch (SQLException e){
e.printStackTrace();
}
return rs;
}
理想情况下,这就是我想要做的,在一个函数中包含所有的 try 和 catch,但这给了我错误:Local variable may not have been initilized
我确实意识到我可以这样做:
public function start(){
try{
ResultSet apples = getApples();
catch (SQLException e){
e.printStackTrace();
}
}
public ResultSet getApples () throws SQLException {
PreparedStatement stmt = con.prepareStatement("SELECT * FROM fruit WHERE type='apples'");
return stmt.executeQuery();
}
但我真的希望在函数内处理异常并返回结果。
编辑
好吧,对所提供的内容进行修改后的答案。我在这个问题上的全部目标是使我的脚本的主要功能尽可能干净。即使是额外的if ( _resultSet != null ) 也是我不太喜欢的东西。话虽如此,我对这个结果很满意:
public ResultSet getApples (){
try{
PreparedStatement stmt = con.prepareStatement("SELECT * FROM fruit WHERE type='apples'");
return stmt.executeQuery();
} catch (SQLException e){
System.out.println("************************");
System.out.println("Class.getApples null");
System.out.println(e.getMessage());
return null;
}
}
一切都在 getApples 函数中处理,当调用 _resultSet.next() 时,我得到一个 NullPointerException 和 getApples 异常中的打印,因此我能够找到错误并快速调试。
【问题讨论】:
-
第一个问题是(正如编译器所说)变量 rs 可能没有被初始化(如果抛出异常就会发生这种情况)。声明时将其设置为 null 即可。
-
如果出现 SQLException,getApples() 应该返回什么?
-
您应该在同一方法中打开和关闭一个 ResultSet。返回 List
而不是 ResultSet。 -
记得在
finally块或更好的 Java SE 7 try-with-resource 中关闭您的资源(不太可能被错误地使用)。我建议使用 Execute Around 成语。 stackoverflow.com/questions/341971/… -
@GriffeyDog 那不会产生额外的循环。一个创建
List,然后在我想读取所有返回的值时再次遍历它?