方法编译给出“缺少返回语句”错误

时间:2013-03-04 02:14:03

标签: java

这种方法有什么问题? 这不会编译。 给出如下错误: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

3 个答案:

答案 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;

至少那时你可以开始调试(你可能需要很多)。