は私のMySQLのテーブルです: -Javaコードを避けるために、4つの異なるMySQLクエリをif条件と一緒にマージすることは可能ですか?ここ
以下pk_id priority active total
--------------------------------
1 west 0 3
2 north 0 0
3 south 1 1
4 east 0 0
は、MySQL帖と私のJavaのコードです: -
String past_p;
String past_tot;
String new_p;
String new_tot;
//query 1: active= 1 means, past processed data.
String past_priority = "select priority, total from tbl_priority where active = 1";
Statement stmt = (Statement) conn.createStatement();
ResultSet Op=stmt.executeQuery(past_priority);
if(Op.next()){
past_p =Op.getString("priority");
past_tot =Op.getString("total ");
}
//query 2:
String new_priority = "Select priority, max(total) from tbl_priority";
ResultSet Np =stmt.executeQuery(new_priority);
if(Np.next()){
new_p =Np.getString("priority");
new_tot =Np.getString("total ");
}
if (past_tot >= new_tot){
return 0;
}
else{
//query 3:
String update_a= "update tbl_priority set active=0 where NOT (priority=?");
PreparedStatement upa = conn.prepareStatement(update_a);
upa.setString(1, new_p);
upa.executeUpdate();
// query 4:
String update_b= "update tbl_priority set active = 1 where priority =?";
PreparedStatement upb = conn.prepareStatement(update_b);
upb.setString(1, new_p);
upb.executeUpdate();
}
私は時間が本当に重要アプリケーションを保存し、リアルタイムの生活を開発しています。 私はこの関数を小さな間隔で呼び出す必要があるので、処理能力と実行時間を節約するために上記のコードを最適化する必要があります。
上記機能の簡単な説明:
クエリ1:
Iがアクティブフラグとそれぞれの優先度の合計値を識別するために必要、1 =アクティブ、
クエリ2/3/4:
最高の合計値が必要です。前回の処理データと比較する必要があります。以前の値より大きい場合は、以前に処理したデータのフラグをリセットし、現在の最高合計値でアクティブ= 1を設定する必要があります。
上記の例では、現在の最高(最大(合計))は「西」で、過去のアクティブは南です。南西の活発な旗は現在の西が合計で最高の価値を持つことを確認した後に変更する必要があります。
これらのMySQLクエリがマージされると、処理速度と実行時間が節約されます。
これらのMySQLのquiresをマージし、同じ結果(多分ジョイント機能を使用して)を得るために中間のJavaコードを避けることは可能ですか?私は数回試して失敗しました。
コードの一部が高く評価されています!
ありがとうございました。
こんにちは、私はちょうど上記のプロセスを最適化する必要があります。私はsqlクエリを使用して解決策ですが、私は入れ子quiresとSQL結合しようとしましたが失敗しました!どんな助けも高く評価されます。 – jasim
さて、あなたはそれを行うストアドプロシージャを作成しないでください....そして、コードの背後と変数の内部であなたの検証を避けることができますか?小規模な手順を実行するには秒の半分の時間がかかりますが、そのすべてのチェックとifをスキップしてそこに進んでいきます。手順の最後には現在の優先順位を選択してください。 – Veljko89
@ Veljko89応答に感謝します。現在の優先順位の選択は、プログラム全体ではなく、この機能の終了です。ストアドプロシージャについてはあまりよく分かりません。提案はありますか? – jasim