ネットワーク開発では、複数の条件を含む包括的なクエリが非常に一般的であり、このビジネス ニーズに対処するには、通常、次の方法を使用します:
1. パラメーター値を SQL ステートメントに直接結合します。そしてクエリを実行します。
このメソッドのセキュリティは比較的貧弱であると言え、SQL によって誤って挿入される可能性があります。最初にパラメータ値の特殊文字をフィルタリングすることもできますが、それは常に非常にエレガントであるとは限りません。
2. 最初にプレースホルダーを使用しますか? ' を使用して SQL を結合し、条件判断によって PreparedStatement を埋めます。
この方法で TX を使用したことがある人なら、この方法の複雑さを知っています。まず、SQLを書くときに一度判断しなければならず、PSTを記入するときに再度判断しなければならないので面倒です。
3. プロシージャ ストレージ
私は以前、プロジェクトを MySQL から MSSQL に移行し、最終的には異なるバージョンの製品を別のデータベースで実行することにしました。時間。 。
実際、私が言いたいのは、比較的エレガントでシンプルなクエリ メソッドが欲しいということだけです。前の段落で .NET で提供されている SQLHelper に触発されて、同様のコンポーネントを作成しました (実際、Google で調べました)。要件を満たす根拠が見つかりませんでした
1. 動的クエリとは何ですか?
クエリの DQL ステートメントを作成するこのプロセスは、動的クエリと呼ばれます。 2. 動的クエリの難しさ
3. 最終的なクエリ文の構成
2 つの基本原則
select column... from table。
このクエリ条件が最初のクエリ条件である場合、「and」を追加する必要はありません。それ以外の場合、問題が発生します。クエリ
select column...from table where 1=1
"/dynamicQueryServlet" DynamicQueryServlet serialVersionUID = 1L "text/html;charset=UTF-8"String name = request.getParameter("name"= request.getParameter("sex"= request.getParameter("age"= request.getParameter("depNo"String baseSQL = "select name,sex,age,depNo from tb_employee where 1=1"= StringBuilder();List<String> params = ArrayList<String>" and name=? ""name," + name);" and sex=? ""sex," +" and age=? ""age," +" and depNo=?""depNo," += = = = == ( i = 0; i < params.size(); i++== str.split(","); (arr[0].equals("age" a = Integer.parseInt(arr[1+ 1+ 1, arr[1== res.getString("name"= res.getString("sex" targetAge = res.getInt("age"= res.getString("depNo"= "name=" + targetName + "--" + "sex=" + targetSex + "--" + "age=" + targetAge + "--" + "depNo=" ++ "<br>" (ClassNotFoundException | (res != (ps != (conn != = length = (length == 0"查询为空"+ "<br>" + (str == | str.equals("" Connection getConnection() "com.mysql.jdbc.Driver" DriverManager.getConnection("jdbc:mysql://localhost:3366/test01", "root", "123"
以上がJDBC は動的クエリをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。