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

ResultSet可能な実行パスごとにa を返す必要があります。現状では、tryブロックが成功した場合、何も返されません。finallyブロックを追加して、そこtry-catchに a を入れるか、初期化していないため null にすることができます。return 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 に答える
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 に答える
0

始めるには、これをメソッドの最後の行として追加します。

return null;

少なくとも、デバッグを開始できます (これにはおそらく多くの作業が必要になるでしょう)。

于 2013-03-04T02:21:37.743 に答える