2011-08-02 12 views
2

問題を解決するのが簡単なように思えるかもしれませんが、このコードで私の誤りを見つけることはできません。私はintを返しています。Eclipseは「このメソッドはint型の結果を返す必要があります」と私に伝えています。Java:戻り値の問題

public static int getLastId(int table) { 

    Connection connection = null; 
    String url = "jdbc:postgresql://someServer:port/someDB"; 

    try { 
     //Verbindung herstellen 
     connection = DriverManager.getConnection(url, "someUser", 
       "somePassword"); 
     } catch (SQLException e1) { 
     //fehlerhafte Verbindung 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    try { 
     //0 - source ; 1 - destination Table 
     if(table == 0){ 

     Statement stmt = connection.createStatement(); 
     ResultSet lastId; 
     lastId = stmt.executeQuery("SELECT index FROM table0 ORDER BY someIndex DESC LIMIT 1"); 
     String theLastId0 = ""; 
     while(lastId.next()) 
      { 

       //System.out.print(lastId.getString("index")); 
       theLastId0 = lastId.getString("index"); 

      } 
      lastId.close(); 
      stmt.close(); 
      connection.close(); 
      int letzteId0 = Integer.parseInt(theLastId0); 

     return letzteId0; 

     }else if(table == 1){ 

      Statement stmt = connection.createStatement(); 
      ResultSet lastId; 
      lastId = stmt.executeQuery("SELECT index FROM table1 ORDER BY someIndexDESC LIMIT 1"); 
      String theLastId1 = ""; 
       while(lastId.next()) 
       { 

        //System.out.print(lastId.getString("index")); 
        theLastId1 = lastId.getString("index"); 

       } 
       lastId.close(); 
       stmt.close(); 
       connection.close(); 
       int letzteId1 = Integer.parseInt(theLastId1); 

      return letzteId1; 
      } 

    } 
    catch (SQLException e) { 

     System.out.println("Connection Failed! Check output console"); 
     e.printStackTrace(); 
     return -1; 
    } 
} 

答えて

4

この方法は、必ずint型を返す必要があります。

あなたの場合とあなたの他の場合はfalseと評価された場合、あなたのバージョンでは何も返さないのであれば、他の後に、次のelseステートメント

else { 
return 0; 
} 

を追加する必要があります。

+0

ありがとうございました。この問題に対する最善の答えはありがとうございます。私が仕事から帰宅しても思っていなかったことの一つ^^。場合によっては、単に愚かなことが時々あることがあるかどうかを質問する必要があることもあります。乾杯。 – 1amtoo1337

10

table != 0table != 1の場合はどうなりますか?その後、あなたのメソッドは何も返しません。したがって、elseステートメントをifに追加するか、通常のリターンだけを追加するか、-1のようなダミー値を返します。

プログラマが、このケースが決して実行されないことを知っていても、コンパイラはそのことを知らないので、とにかくそれを幸せにする必要があります。プラスの不快なことは、リフレクションを使用して行うことができるので、メソッドへの入力が有効であると仮定することは決して良い考えではありません。

+0

tskuzzy、あなたの声明にもまさに正しいですが、Manuel Selvaが(私の意見では)簡潔に、より良い&短い説明を与えたので、彼は答えポイントを得るでしょう。 – 1amtoo1337

1

table!= 0または1の場合、コードは何も返しません。最後にreturn 0;を追加するか、適切な動作が何であれ、問題はないはずです。

戻り値の型が指定されている場合は、後で参照するために、すべての条件でメソッドが値を返す必要があります。何も返されない状況がある場合、コードには障害があります。それが役に立てば幸い!