0

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

3 回答 3

1

一般来说,资源获取和释放的模式是:

Resource res = acquire();
try {
    use(res);
} finally {
    res.release();
}

或者在 Java SE 7 中:

try (Resource res = acquire()) {
    use(res);
}

您不能做的事情(默认情况下)是从方法返回资源并期望它被某种魔法清理。您可能想查看 Execute Around 习语,尽管首先更好地理解基本原理可能是可取的。

于 2013-03-04T02:22:32.897 回答
1

ResultSet您必须为每个可能的执行路径返回一个。就目前而言,如果try块成功,则不会返回任何内容。您可以向您添加一个finallytry-catchreturn null;在其中放入一个块,或者return rs;它为空,因为您没有对其进行初始化。

public ResultSet mqe( String q ){
ResultSet rs;

    try{
    ...
    }catch(Exception ee){
       ee.printStackTrace(); }
       return rs;
    }finally
    {
       return rs;
    }
于 2013-03-04T02:31:41.030 回答
0

为了让您继续前进,请将其添加为方法的最后一行:

return null;

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

于 2013-03-04T02:21:37.743 回答