SQL組み立て時に条件によってWHERE句が変化する場合のTips
SQLをプログラムで組み立てて実行するときで、条件によってWHERE句が変化する場合、ANDがつくかどうかでとても煩雑なコードになることがある。
以下の例のような感じだ。
StringBuilder sql = new StringBuilder(); sql.append("SELECT xxx, ... FROM xxx"); boolean where = false; if (条件1) { sql.appned(" WHERE hoge = ?"); where = true; } if (条件2) { if (where) { sql.append(" AND foo = ?"); } else { sql.appned(" WHERE foo = ?"); where = true; } } if (条件3) { if (where) { sql.append(" AND bar = ?"); } else { sql.appned(" WHERE bar = ?"); where = true; } }
こんな場合は、以下のように「WHERE 1 = 1」を最初に書いておけば、常に AND をつけることができ、コードがスッキリする。
StringBuilder sql = new StringBuilder(); sql.append("SELECT xxx, ... FROM xxx WHERE 1 = 1"); if (条件1) { sql.appned(" AND hoge = ?"); } if (条件2) { sql.append(" AND foo = ?"); } if (条件3) { sql.append(" AND bar = ?"); }