3

より優れた、より高速な、より正確な 1 つまたは別のバリアントを使用するために、どのような引数を与えることができますか。

最初のバリアント:

StringBuffer sql = new StringBuffer("SELECT DISTINCT f.ID ")
    .append("FROM FIRST_TABLE F ")
        .append("LEFT JOIN SECOND_TABLE s ON f.ID = s.F_ID ")
    .append("WHERE ")
        .append("F.BOOL = 1 ")
        .append("AND S.DATE IS NOT NULL ")
        .append("AND S.CLOSED = 0 ");

2 番目のバリアント:

String sql = "SELECT DISTINCT f.ID " +
             "FROM FIRST_TABLE F " +
                "LEFT JOIN SECOND_TABLE s ON f.ID = s.F_ID " +
             "WHERE "
                "F.BOOL = 1 " +
                "AND S.DATE IS NOT NULL " +
                "AND S.CLOSED = 0";

*注: Class StringおよびClass StringBuffer .

4

2 に答える 2

11

2番目の方が優れています:

  • より明確です(コードの多くは、必要なものに関係しています)
  • すべての連結がコンパイル時に行われるため、より効率的です。

実行時の連結必要な場合でも (変数が含まれている場合など)、コンパイルされたコードは必要な場所でStringBuilderorを使用StringBufferします (対象とする Java のバージョンによって異なります)。

データベースクエリを実行している場合、効率はまったく重要ではありません。

于 2012-11-23T13:42:09.780 に答える