JDBCのトレーニングでは、where句の使用について質問があります。java Spring JDBCTemplate - where句
jdbcテンプレートを使用してSpringアプリケーションを使用して管理したいテーブルがデータベースにあるとします。このカラムを使用して、「logbase」としましょう。host、user、clientip私は分離を書かなければならないとし
Select * from Logbase where host = x
と
Select * from Logbase where user = y
と
Select * from Logbase where clientip = z
:つまり、私はすべての列の単一の列に基づいてクエリのDBを許可したいと今と仮定このクエリのすべてのjavaメソッドです。
public Logbase getLogbaseFromHost(String id)
{
String SQL = "select * from Logbase where host = ?";
Logbase logbase = (Logbase) jdbcTemplate.queryForObject(SQL, new Object[]{id},
(rs, rowNum) -> new Logbase(rs.getString("host"), rs.getString("user"),
rs.getInt("clientip")));
return logbase;
}
public Logbase getLogbaseFromUser(String id)
{
String SQL = "select * from Logbase where user = ?";
Logbase logbase = (Logbase) jdbcTemplate.queryForObject(SQL, new Object[]{id},
(rs, rowNum) -> new Logbase(rs.getString("host"), rs.getString("user"),
rs.getInt("clientip")));
return logbase;
}
public Logbase getLogbaseFromClientIP(String id)
{
String SQL = "select * from Logbase where clientip = ?";
Logbase logbase = (Logbase) jdbcTemplate.queryForObject(SQL, new Object[]{id},
(rs, rowNum) -> new Logbase(rs.getString("host"), rs.getString("user"),
rs.getInt("clientip")));
return logbase;
}
2つのパラメータに基づいてクエリdbを許可したい場合は、3つのパラメータのペア(clientip-user、clientip-host、user-hostの3つ)のメソッドを記述する必要があります。
最後に、すべてのパラメータを選択できるようにするには、クエリ内のwhere句を使用してすべての変数を要求する別のメソッドを記述する必要があります。
私が異端を言っておらず、すべてが正しければ、私には7つの方法があります。しかし、私はパラメータと組み合わせの数が増え、これが問題になる可能性があります。それを回避する方法はありますか?
注:作業上の理由から、私はHibernateまたは他のORMフレームワークを使用できません。私はjdbcを使用しなければならない。
忍耐と応答のためにすべてにTnx。
おかげスタニスラフ、私はこれを試してみましょう。私はただ一つのことを理解していない:なぜ、queryForObjectメソッドの呼び出しで、我々はすべての変数を2回書くか? Thasは{host、user、clienttip}ではなく{host、host、user、user、clienttip、clienttip}なのですか? –
私たちは6つのパラメータを持っているので、6つの値を与えなければなりません。それぞれを代用するとしますか? 1つのパラメータで – StanislavL
Tnx、verクリア。私はとても感謝しています。 –