コードは次のとおりです:
/** * 动态生成SQ及SQL参数L * @param ve 接收到的消息的CHGLIST * @param paramList MQ消息中的SQL参数 * @param t 泛型对象 * @param table 数据表 * @param list 可执行SQL语句集合 * @return */public <T> String updateSqlAndParamList(Vector<String> ve,List<String> paramList,T t,String table,List<String> list){ String strSql="";//MQ消息SQlString upSql="";//可执行SQLtry {//组装SQL语句strSql = "update "+table+" set "; upSql="update "+table+" set ";for(int i = 0; i < ve.size(); i++){ String str = ""; String upStr=""; String key = ve.get(i); String fileName="get"+key.toUpperCase(); String value=(String)t.getClass().getMethod(fileName).invoke(t); paramList.add(i,value);if(i == ve.size()-1){ str = key+" = ?"; upStr=key+"='"+value+"'"; }else{ str = key+" = ? ,"; upStr=key+"='"+value+"',"; } strSql+=str; upSql += upStr; } strSql +=" where Id = ? "; upSql+=" where id='"+(String) t.getClass().getMethod("getID").invoke(t)+"'"; list.add(upSql); paramList.add(ve.size(),(String) t.getClass().getMethod("getID").invoke(t)); } catch (Exception e) { logger.info("组装UPDATE SQL失败!失败详情---"+e); }return strSql; }
1. 動的ステートメントを使用する
多くのデータベースでは、Oracle の EXECUTE IMMEDIATE ステートメント、MSSQL の EXEC および SP_EXECUTESQL、Mysql のプリペアド ステートメントなど、動的 SQL を処理するための構文が提供されています。これらの関数を使用すると、データベース側で動的クエリを処理でき、優れたトラバーサルが可能になります。ただし、この方法は比較的単純な動的クエリにのみ適しています。複雑な状況では、次の方法がよく使用されます。
2. ストアド プロシージャを使用する
複雑な状況では、通常、動的 SQL がストアド プロシージャに結合されます。ストアド プロシージャの使用は比較的柔軟ですが、コーディングが複雑になりすぎて、実行効率が低下する場合があります。
3. 他の (JAVA など) プログラムを使用する
他の外部高級言語 (JAVA など) を使用して結合し、実行のためにデータベースに渡すこともできます。柔軟性はありますが、JAVA には集合計算がサポートされていないため、これらの準備を完了するのは簡単ではありません。
動的 SQL を実行する必要がある主な制御プログラムが JAVA の場合、esProc を使用して動的 SQL 計算の完了を支援でき、動的 SQL を簡単に実行できるスクリプトです。 esProc は、Java アプリケーションとデータベースの間に配置できる JDBC インターフェイスを提供します。これにより、アプリケーションは、アプリケーション構造をほとんど変更することなく、あたかもデータベースにアクセスしているかのように esProc スクリプトを実行し続けることができます。
以下では例を使用して、esProc を使用して動的 SQL 計算を実行し、それらを JAVA プログラムに統合する方法を説明します。
以上がJava は SQL ステートメントを生成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。