クエリの数でJavaWeb

問題の説明:

クエリ情報を行う際に、条件の数を選択することができますがあります。そのすべての選択は、あなたの要件に基づいてクエリの必要性は必須ではありません。

例えば:

 

 

 

 

 

 

 ユーザーは自分のニーズに応じて、あなたはパラメータクエリを選択することができ、我々はいくつかのすべてのケースを持っています

  1. 引数はありません、すべてのクエリ
  2. ふるさとメールボックス名+ +
  3. 生家名+ 
  4. 名前メール+
  5. ふるさとメール+
  6. フルネーム
  7. 出生地
  8. ポスト

あなたが固定されたSQL文を使用している場合は、8つの異なるSQLステートメントを使用します。そして、文字入力を判断するために、一緒にSQL文と裁判官の文章は、非常に長いコード、見苦しい無限の読書を表示します。

ソリューション:

考えます:

  • SQLは変化するので、StringBuilderのを使用するのではと思いますされています。StringBuilderのステッチ文字列
  • また、様々な異なる入力スプライシングSQLによれば、ユーザの入力を求めます
  • 問題にSQLインジェクションを防ぐために、PreparedStatementオブジェクトを使用すると、SQLのSQLの実行を実行します
  • 継ぐときスプライシングパラメータは、SQLを与えるために、(名前+起源の場所、後の原産地の最初の名前)の順番を覚えておく必要がありますか?割り当ては、保存されたパラメータのセットにリストを使用します。

コードの実装:

UserDaoクラス{パブリック
  
  / **
  *パラメータに基づいてユーザー情報を照会する
  * @param名
  * @paramの生家
  * @paramメール
  * @returnユーザーオブジェクト
  * /
  静的なパブリックユーザーqueryUser(文字列名、文字列のアドレス、文字列の電子メール){
    // 1.処理SQL
    ユーザーが入力した// 1.1分析パラメータ、およびスプライシングSQL文
    のStringBuilder SQL =新しいStringBuilderの( "選択したユーザからの1 = 1 *"); // 1 = 1 無入力パラメータのためには、検索
    <リスト文字列>リスト=新しい新しいのArrayList <>()
    IF(= nullを&& name.trim名()のisEmpty()!!
){
      sql.append( "と名=?");
      list.add(名);
    } 
    (アドレス= NULL && address.trim()のisEmpty()!){IF
      Sql.append( "アドレスおよび=?");
      List.add(アドレス);
    }
    !IF(メールに電子メールで= NULL &&! {()のisEmpty())TRIM
      sql.append(および電子メールに=);?
      ;)List.add(メールで送信を
    }
    sql.appendを( ";");

    // 2.操作データベース(データベース接続プールドルイドを使用して、)、彼のツールを書いた
    ;接続コネティカット= nullを
    PreparedStatmentてpstmt = NULL;
    のResultSet RS = NULL;
    ユーザーユーザー= NULL;
    試み{
      //データ接続オブジェクトを取得2.1
      コネティカットJDBCUtil.getConnection =();
      //取得2.2 SQLの実行オブジェクト
      てpstmt = conn.prepareStatement(sql.toString());
      2.3の//設定SQL?
      {(。; I <=はlist.size()I ++ INT I = 1)のため
        pstmt.setString(I、List.get(I - 1));
      }
      // 2.4 SQL文の実行
      RS = pstmt.executeQuery()。
      ユーザー= resultSetToUser(RS); // resultSetToUser()は、 に結果を書き込むためにセットからユーザオブジェクトを変換する方法である
    }キャッチ(省略){
      省略

    }最後に{

       JDBCUtil.close(CONN、てpstmt、RS)。

     }

    ユーザーを返します。
  }
}

ツールのデータベース接続プール(ドルイド):

 

 

 

おすすめ

転載: www.cnblogs.com/radishcode/p/11457304.html