锘??xml version="1.0" encoding="utf-8" standalone="yes"?>91精品久久久久久久99蜜桃,精品一区精品二区高清,日韩一区二区精品视频http://www.aygfsteel.com/vso/category/16107.htmlJAVA EEzh-cnThu, 01 Mar 2007 15:35:14 GMTThu, 01 Mar 2007 15:35:14 GMT60Spring 璋冪敤ORACLE瀛樺偍榪囩▼鐨勭粨鏋滈泦 http://www.aygfsteel.com/vso/articles/77571.htmlvsovsoFri, 27 Oct 2006 03:11:00 GMThttp://www.aygfsteel.com/vso/articles/77571.htmlhttp://www.aygfsteel.com/vso/comments/77571.htmlhttp://www.aygfsteel.com/vso/articles/77571.html#Feedback0http://www.aygfsteel.com/vso/comments/commentRss/77571.htmlhttp://www.aygfsteel.com/vso/services/trackbacks/77571.html榪涜鐗瑰畾鐨勭紪紼?榪欎篃鏄垜浠庝笉鐪嬪ソweblogic涔嬬被鐨勫鉤鍙扮殑鍘熷洜),澶у璞″瓨鍙栦竴瑕佸畾鐢ㄥ畠鑷繁
鐨凩OB瀵硅薄,鎵騫告垜榪樿兘閫氳繃LONG RAW鏉ヤ唬鏇?浠ヤ究鑳戒嬌紼嬪簭涓嶉渶瑕佺壒瀹氱殑緙栫爜.浣嗗浜庡瓨鍌ㄨ繃紼?
(鎴戞槸璇磋繑鍥炵粨鏋滈泦鐨勫瓨鍌ㄨ繃紼?,鎴戣繕娌℃湁浠涔堟柟娉曡兘鐢ㄤ竴涓氱敤鐨勭▼搴忔潵澶勭悊ORACLE.澶鐨?
鏁欐潗鎴栨枃绔犲湪璁插瓨鍌ㄨ繃紼嬬殑璋冪敤鍙槸涓嶈礋璐d換鍦扮畝鍗曟墽琛屼竴浜涙兜鏁版垨鏃犵粨鏋滆繑鍥炵殑瀛樺偍榪囩▼,
浣垮ぇ澶氭暟璇昏呮牴鏈笉鐭ラ亾鍒板簳濡備綍璋冪敤瀛樺偍榪囩▼鐨勭粨鏋滈泦.鑰屽湪Spring涓?鏍規(guī)湰灝辨病鏈夌湡姝e畬鍏?
鍦頒粙緇嶅瀛樺偍榪囩▼鐨勭粨鏋滈泦鐨勫鐞?鏇村埆璇磋薄oracle榪欑"鐗瑰埆"鐨勫瓨鍌ㄨ繃紼嬬殑緇撴灉闆嗗鐞?

鍏堟潵綆鍗曠湅涓涓嬫垜浠浣曞湪JDBC涓鐞嗗瓨鍌ㄨ繃紼嬬殑緇撴灉闆嗙殑閫氱敤嫻佺▼:

1.鑾峰彇CallableStatement璇彞:

CallableStatement cs = conn.prepareCall("{call spName(?,?,?)}");

2.浼犲叆杈撳叆鍙傛暟鍜屾敞鍐岃緭鍑哄弬鏁?/p>

cs.setXXX(index,value);//杈撳叆鍙傛暟
cs.registerOutParameter(index,type);//杈撳嚭鍙傛暟

3.鎵ц瀛樺偍榪囩▼:

cs.execute();

瀵逛簬涓涓瓨璇歌繃紼?濡傛灉榪斿洖鐨勭粨鏋滄槸鎴戜滑棰勫厛鐭ラ亾鐨?閭d箞鍙互鏍規(guī)嵁瀛樺偍榪囩▼瀹氫箟鐨勯『搴忔潵榪涜
澶勭悊(浜嬪疄涓婁竴鑸笉浼?xì)杩欐?,浣嗗浜庡鏉傜殑澶氱粨鏋滈泦鐨勫鐞?濡備綍瀹氫箟涓涓氱敤鐨勬祦紼?

鎴戜滑鍏堢湅涓涓婮DBC鏈韓鑳戒負(fù)鎴戜滑鎻愪緵浠涔?
涓涓瓨鍌ㄨ繃紼嬫墽琛屽悗榪斿洖鐨勬槸boolean鍨?
boolean flag = callableStatement.execute();
濡傛灉flag涓簍rue,閭d箞璇存槑榪斿洖浜?jiǎn)涓涓粨鏋滈泦(ResultSet)綾誨瀷,浣犲彲浠ョ敤getResultSet()寰楀埌褰撳墠琛屾墍鍦?
鐨勭粨鏋?鑰屽鏋滆繑鍥炰負(fù)flase,璇存槑浠涔堝憿?

濡傛灉浣犱笉榪涜澶勭悊,浠涔堜篃涓嶈兘璇存槑,鍙兘璇存槑褰撳墠鎸囬拡涓嶆槸ResultSet,鏈夊彲鑳芥槸鏇存柊璁℃暟(updateCount)
涔熷彲鑳戒粈涔堜篃娌℃湁鍙嶅洜.

閭d箞濡傛灉褰撳墠鎸囬拡涓篺lase鏃跺浣曞鐞?鎴戜滑搴旇鍏坓etUpdateCount();濡傛灉榪斿洖-1,鏃笉鏄粨鏋滈泦,鍙?
涓嶆槸鏇存柊璁℃暟浜?璇存槑娌$殑榪斿洖浜?鑰屽鏋済etUpdateCount()榪斿洖0鎴栧ぇ浜?,鍒欒鏄庡綋鍓嶆寚閽堟槸鏇存柊璁℃暟(
0鐨勬椂鍊欐湁鍙兘鏄疍DL鎸囦護(hù)).鏃犺鏄繑鍥炵粨鏋滈泦鎴栨槸鏇存柊璁℃暟,閭d箞鍒欏彲鑳借繕緇х畫鏈夊叾瀹冭繑鍥?鍙湁鍦ㄥ綋鍓?
鎸囨寚閽坓etResultSet()==null && getUpdateCount() == -1鎵嶈鏄庢病鏈夊啀澶氱殑榪斿洖.

瀛樺偍榪囩▼鐨勮繑鍥炲拰ResultSet綾諱技,姣忔澶勭悊鐨勮繑鍥炵粨鏋滅浉褰撲簬鏄疪esultSet鐨凴ow,鍙笉榪囧瓨鍌ㄨ繃紼嬬殑Row
鏈鍏堝湪絎竴琛岃屼笉鏄薄ResultSet瑕佸厛next鎵嶅埌絎竴琛?瀛樺偍榪囩▼鍚戜笅縐誨姩涓琛岀敤getMoreResults(),鐩?
褰撲簬ResultSet鐨刵ext().鍚屾牱瀹冭繑鍥瀊oolean鍜屼笂闈㈢殑flag涓鏍?鍙槸璇存槑褰撳墠琛屾槸涓嶆槸ResultSet,濡傛灉鏄?
flase,浣犺繕鏄鍒ゆ柇鏄笉鏄痷pdateCount,鍦ㄦ瘡涓琛?閮借鍏堝悓鏃跺垽鏂槸鍚︿負(fù)ResultSet榪樻槸UpdateCount,濡?
鏋滄槸鍏朵腑涓縐嶅垯瑕佺戶緇璯etMoreResults(),褰撲笉鏄疪esultSet涔熶笉鏄痷pdateCount鏃?璇存槑娌℃湁榪斿洖緇撴灉浜?
榪欐椂鍐嶈幏鍙栬緭鍑哄弬鏁?

鐪嬫槑鐧戒簡(jiǎn)鍚?

閭f垜浠氨鏍規(guī)嵁涓婇潰鐨勮鍒欐潵鍐欎竴涓氱敤鐨勬祦紼嬪惂:

棣栧厛,鎴戜滑瑕佺‘瀹氫粈涔堟椂鍊欐病璇寸粨鏋滈泦浜?
if(cs.getResultSet() == null && cs.getUpdateCount() == -1)
鐜板湪鎴戜滑鍋氫竴涓驚鐜?
ResultSet rs = null;
int updateCount = -1;
flag = cs.execute();
do{
聽聽聽 updateCount = cs.getUpdateCount();
聽聽聽 if(updateCount != -1){//璇存槑褰撳墠琛屾槸涓涓洿鏂拌鏁?
聽聽聽聽聽聽聽 //澶勭悊.
聽聽聽聽聽聽聽 cs.getMoreResults();
聽聽聽聽聽聽聽 continue;//宸茬粡鏄洿鏂拌鏁頒簡(jiǎn),澶勭悊瀹屾垚鍚庡簲璇ョЩ鍔ㄥ埌涓嬩竴琛?
聽聽聽聽聽聽聽聽聽聽聽聽 //涓嶅啀鍒ゆ柇鏄惁鏄疪esultSet
聽聽聽 }
聽聽聽 rs = cs.getResultSet();
聽聽聽 if(rs != null){//濡傛灉鍒頒簡(jiǎn)榪欓噷,璇存槑updateCount == -1
聽聽聽聽聽聽聽 //澶勭悊rs
聽聽聽聽聽聽聽 cs.getMoreResults();
聽聽聽聽聽聽聽 continue;
聽聽聽聽聽聽聽聽聽聽聽 //鏄粨鏋滈泦,澶勭悊瀹屾垚鍚庡簲璇ョЩ鍔ㄥ埌涓嬩竴琛?
聽聽聽 }
聽聽聽 //濡傛灉鍒頒簡(jiǎn)榪欓噷,璇存槑updateCount == -1 && rs == null,浠涔堜篃娌$殑浜?
聽聽聽
}while(!(updateCount == -1 && rs == null));
cs.getXXX(int);//鑾峰彇杈撳嚭鍙傛暟


浠ヤ笂鏄浜庨氱敤鐨勫瓨鍌ㄨ繃紼嬭繑鍥炵殑緇撴灉闆嗙殑澶勭悊,鑰宱racle,瀹冧笉鑳借繑鍥炵粨鏋滈泦,鍙兘鍦ㄨ緭鍑哄弬鏁頒腑
榪斿洖涓涓猚ursor,鎵浠ラ氱敤鐨勬祦紼嬩腑浣犺幏鍙栦笉鍒頒換浣曠粨鏋?

package PK_AREA_PUBLIC is
聽 TYPE serarch_result IS REF CURSOR;
聽 PROCEDURE聽 area_search(vTarget_in IN VARCHAR2 ,cur_result_out OUT serarch_result) ;
end PK_AREA_PUBLIC;

package body PK_AREA_PUBLIC is
聽 PROCEDURE聽 area_search(vTarget_in IN VARCHAR2 ,cur_result_out OUT serarch_result)
聽 IS
聽 sqlstr VARCHAR2(1000);
聽 BEGIN
聽聽聽聽聽聽 sqlstr:='select .................................';
聽聽聽聽聽聽 OPEN cur_result_out FOR sqlstr USING vTarget_in;
聽 END area_search;
end PK_AREA_PUBLIC;


瀵逛簬涓婇潰鐨勪緥瀛?瀛樺偍榪囩▼鏈変竴涓緭鍏ュ弬鏁?涓涓緭鍑哄弬鏁?鎴戜滑瑕佹帴鍙楄緭鍑哄弬鏁頒綔涓虹粨鏋滈泦澶勭悊.鎵
浠ユ敞鍐岀殑鏃跺欏簲璇ユ敞鍐屼負(fù):

cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);//杈撳嚭鍙傛暟

榪欐牱鍦ㄥ瓨鍌ㄨ繃紼嬫墽琛屽悗,鑾峰彇杈撳嚭鏁伴犲瀷涓篟esultSet灝卞彲浠ュ鐞?

ResultSet rs = (ResultSet)cs.getObject(2);

濡傛灉鏈夊涓粨鏋滈泦灝辯敤澶氫釜杈撳嚭鍙傛暟.


鏄庣櫧浜?jiǎn)ORACLE鐨勭壒孌婃?鎴戜滑鍐嶇湅鐪嬪湪spring涓鏋滃鐞嗗畠鐨勫瓨鍌ㄨ繃紼嬬殑緇撴灉闆?
spring鍦ㄥ鐞嗗鏉傚璞$殑鏃跺?澶ч兘閲囩敤鍥炶皟鐨勬柟娉?瑕佹眰紼嬪簭鍛樿嚜宸卞疄鐜版帴鍙f柟娉?涔熷氨鏄畠鎻愪緵浜?
紼嬪簭榪愯鏃剁殑鍙傛暟,瑕佹眰浣犺嚜宸卞榪欎簺鍙傛暟榪涜澶勭悊.瀵逛簬JdbcTemplate,瀹冨湪寰堝鍦版柟鎻愪緵浜?jiǎn)ResultSet
鍙傛暟渚涚▼搴忓憳澶勭悊.鍦⊿pring鏂囨。涓彁渚涗簡(jiǎn)瀵逛簬閫氱敤嫻佺▼,涔熷氨鏄粠瀛樺偍榪囩▼鎵ц緇撴灉涓幏鍙栫粨鏋滈泦鐨?
渚嬬▼:

Map out = execute(new HashMap());
鍏跺疄瀹冩槸榛樿瀹炵幇浜?jiǎn)涓婇潰JDBC閫氱敤嫻佺▼涓ResuleSet鍒癕ap鐨勫皝瑁?鑰屽浜嶰racle,鎴戜滑灝卞繀欏昏嚜宸辨墜
瀹炵幇瀵硅緭鍑哄弬鏁頒腑ResultSet鐨勫洖璋?

public class SpringStoredProcedure
聽聽聽 extends StoredProcedure {
聽 public ArrayList<HashMap> set = new ArrayList<HashMap>();
聽 //澹版槑涓涓敤浜庢帴鏀剁粨鏋滈泦鐨勬暟鎹粨鏋?鍏朵腑鐨勫厓绱犱負(fù)row,鐢╩ap瀛樻斁

聽 private Map inParam;//杈撳叆鍙傛暟
聽 private RowMapper rm = new RowMapper(){
聽聽聽 public Object mapRow(ResultSet rs,int rowNum) throws SQLException{
聽聽聽聽聽 return null;//涓嶇敤浠庡瓨鍌ㄨ繃紼嬫湰韜幏鍙栫粨鏋?
聽聽聽 }
聽 };

聽 private RowMapperResultReader callback = new RowMapperResultReader(rm ){
聽聽聽 public void processRow(ResultSet rs) //鍥炶皟澶勭悊
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 throws SQLException{
聽聽聽聽聽 int count = rs.getMetaData().getColumnCount();
聽聽聽聽聽 String[] header = new String[count];
聽聽聽聽聽 for(int i=0;i<count;i++)
聽聽聽聽聽聽聽 header[i] = rs.getMetaData().getColumnName(i+1);
聽聽聽聽聽 while(rs.next()){
聽聽聽聽聽聽聽 HashMap<String,String> row = new HashMap(count+7);
聽聽聽聽聽聽聽 for(int i=0;i<count;i++)
聽聽聽聽聽聽聽聽聽 row.put(header[i],rs.getString(i+1));
聽聽聽聽聽聽聽 set.add(row);
聽聽聽聽聽 }
聽聽聽 }
聽 }; //RowMapperResultReader浣滀負(fù)杈撳嚭鍙傛暟鐨勫洖璋冨彞鏌?
聽 public SpringStoredProcedure(DataSource ds, String SQL) {
聽聽聽 setDataSource(ds);
聽聽聽 setSql(SQL);
聽 }

聽 public void setOutParameter(String column,int type){
聽聽聽 declareParameter(new SqlOutParameter(column, type,callback));
聽聽聽聽//鍒╃敤鍥炶皟鍙ユ焺娉ㄥ唽杈撳嚭鍙傛暟
聽 }
聽 public void setParameter(String column,int type){
聽聽聽 declareParameter(new SqlParameter(column, type));
聽 }

聽 public void SetInParam(Map inParam){
聽聽聽 this.inParam = inParam;
聽 }

聽 public Map execute() {
聽聽聽 compile();
聽聽聽 return execute(this.inParam);
聽 }
}

涓嬮潰鎴戜滑鐪嬩竴涓嬭皟鐢ㄨ繃紼?

聽聽聽
聽聽聽 DriverManagerDataSource ds = .......;

聽聽聽 SpringStoredProcedure sp = new SpringStoredProcedure(ds,"PK_AREA_PUBLIC.area_search");
聽聽聽
聽聽聽 //娉ㄥ唽鍙傛暟綾誨瀷,杈撳叆鍙傛暟鍜岃緭鍑哄弬鏁板悓鏃舵敞鍐?鍚﹀垯涓嶈兘姝g‘緙栬瘧瀛樺偍榪囩▼
聽聽聽 sp.setParameter("vTarget_in",java.sql.Types.VARCHAR);
聽聽聽 sp.setOutParameter("cur_result_out",oracle.jdbc.OracleTypes.CURSOR);
聽聽聽 sp.compile();
聽聽聽
聽聽聽 //浼犲叆杈撳叆鍙傛暟鍊?
聽聽聽 Map in = new HashMap();
聽聽聽 in.put("vTarget_in","涓涓唴瀹?);
聽聽聽 sp.SetInParam(in);
聽聽聽
聽聽聽 //鎵ц瀛樺偍榪囩▼
聽聽聽 sp.execute();

聽聽聽 Map m = sp.set.get(0);//ReultSet鐨勭涓鏉¤褰?
聽聽聽聽 //set瀹氫箟涓篠pringStoredProcedure鐨勫睘鎬х敤浜庢帴鏀跺洖璋冩椂鐨勬暟鎹?
聽聽聽聽 //濡傛灉鏈夊涓緭鍑哄弬鏁?搴旇鍦ㄦ瘡涓緭鍑哄弬鏁扮殑鍥炶皟鏂規(guī)硶涓敓鎴愯杈撳嚭
聽聽聽聽 //鍙傛暟瀵瑰簲鐨凙rrayList,鐒跺悗鍔犲埌涓涓垚鍛樺彉閲忕殑鏁版嵁緇撴瀯涓?
聽聽聽 Iterator i = m.keySet().iterator();
聽聽聽 while(i.hasNext()){
聽聽聽聽聽 String key = i.next().toString();
聽聽聽聽聽 System.out.println(key + "=>" + m.get(key));
聽聽聽 }

聽 鎬諱箣,涓婇潰鐨勬柟娉曡櫧鐒惰В鍐充簡(jiǎn)Spring涓Oracle瀛樺偍榪囩▼鐨勮皟鐢?浣嗘垜鏋佸姏涓嶆帹鑽愯繖紼嬪鏉傜殑澶勭悊



vso 2006-10-27 11:11 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 德江县| 天峨县| 晴隆县| 石泉县| 浠水县| 平乡县| 新竹市| 和林格尔县| 贵阳市| 大兴区| 稷山县| 平乡县| 虎林市| 巴林右旗| 无棣县| 绩溪县| 肃宁县| 瑞金市| 缙云县| 房产| 阿瓦提县| 万山特区| 化州市| 繁昌县| 郸城县| 荃湾区| 崇左市| 肃南| 湖口县| 渭源县| 沂南县| 方正县| 四会市| 阿克苏市| 莱西市| 蒙自县| 洛南县| 镇安县| 石嘴山市| 财经| 台北市|