这种方法有什么问题? 这不会编译。 给出如下错误:rs可能未初始化 如果我在try块中使用“ResultSet rs”,那么错误是:找不到变量rs 如果return语句也在try块内,那么错误是:缺少return语句。 我不知道我做错了什么。 请帮助解决此错误。 感谢
public ResultSet mqe( String q ){
ResultSet rs;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String db= "SS.mdb";
String database= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+ db.trim()+ ";DriverID=22}";
Connection conn= DriverManager.getConnection( database,"","" );
Statement s= conn.createStatement();
rs=s.executeQuery(q);
s.close();
conn.close();
}catch(Exception ee){ ee.printStackTrace(); }
return rs;
}//mqe
答案 0 :(得分:1)
通常,资源获取和发布的模式是:
Resource res = acquire();
try {
use(res);
} finally {
res.release();
}
或者在Java SE 7中:
try (Resource res = acquire()) {
use(res);
}
你不能做的事情(默认情况下)是从一个方法返回一个资源,并期望它被某种魔法清理掉。你可能想看看Execute Around习语,尽管首先要更好地理解基础知识是可取的。
答案 1 :(得分:1)
您必须为每个可能的执行路径返回ResultSet
。就目前而言,如果try
块成功,则不会返回任何内容。您可以向finally
添加try-catch
阻止,并在其中放置return null;
或return rs;
,因为您没有初始化,所以该地址为空。
public ResultSet mqe( String q ){
ResultSet rs;
try{
...
}catch(Exception ee){
ee.printStackTrace(); }
return rs;
}finally
{
return rs;
}
答案 2 :(得分:0)
为了让您前进,请将其添加为方法的最后一行:
return null;
至少那时你可以开始调试(你可能需要很多)。