程式碼如下:
/** * 动态生成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.使用動態語句
許多資料庫都提供了處理動態SQL的語法,如Oracle的EXECUTE IMMEDIATE語句、MSSQL的EXEC和SP_EXECUTESQL、Mysql的預處理語句等。這些功能讓我們在資料庫端來處理動態查詢提供了極大遍歷,但這種方式只適用於相對簡單地動態查詢,複雜的情況經常會採用下面的方式。
2、使用預存程序
對於複雜的情況,一般會在預存程序中來拼接動態SQL。使用預存程序完成相對靈活,但編碼複雜度過高,有時運作效率較低。
3、使用其他(如JAVA)程式
使用外部的其他高階語言(如JAVA)拼接後交由資料庫執行也是一種選擇,其彈性較高,但由於JAVA缺乏對集合計算的支持,完成這些準備工作並不輕鬆。
如果需要執行動態SQL的主控程式是JAVA的,那麼可以使用集算器來協助完成動態SQL類別計算,集算器是動態解釋執行的腳本,可以方便拼出動態SQL執行。集算器提供了JDBC接口,可以置於Java應用程式與資料庫之間,讓應用程式繼續象存取資料庫一樣執行集算器腳本,應用程式結構幾乎不用改變。
下面透過範例來說明如何使用集算器完成動態SQL類別計算,並整合進JAVA程式。
以上是java產生SQL語句的詳細內容。更多資訊請關注PHP中文網其他相關文章!