因為MySQL目前不支持動態(tài)參數(shù)分頁所以存儲過程中要么傳sql語句過去要么自己寫個字符串連接方法
下為第二種方法
把每個需要分割的地方單寫一行,清除
1.BEGIN
-
1.SELECT CEIL(COUNT(*)/pageNum) INTO pageCount FROM mytestdb.mttest WHERE tt_id = arg_mt_id;
1.SET @sqlStr = CONCAT('SELECT `mt_id`,`tt_id`,`tt_name` FROM `mytestdb`.`mttest` WHERE `tt_id` = ');
1.SET @sqlStr = CONCAT(@sqlStr,arg_mt_id);
1.SET @sqlStr = CONCAT(@sqlStr,' LIMIT ');SET @sqlStr = CONCAT(@sqlStr,((pageNum-1)*pageSize));
1.SET @sqlStr = CONCAT(@sqlStr,',');
1.SET @sqlStr = CONCAT(@sqlStr,pageSize);
1.SET @sqlStr = CONCAT(@sqlStr,';');
1.PREPARE s1 FROM @sqlStr;
1.EXECUTE s1;
1.DEALLOCATE PREPARE s1;
1.END
或者寫成一行,效率高但是更容易寫錯
1.BEGIN
1.SELECT CEIL(COUNT(*)/pageNum) INTO pageCount FROM mytestdb.mttest WHERE tt_id = arg_mt_id;
1.SET @sqlStr = CONCAT('SELECT `mt_id`,`tt_id`,`tt_name` FROM `mytestdb`.`mttest` WHERE `tt_id` = ',arg_mt_id,' LIMIT ',
1.((pageNum-1)*pageSize),',',pageSize';');
1.PREPARE s1 FROM @sqlStr;EXECUTE s1;DEALLOCATE PREPARE s1;END
java端
1.try {Connection conn = db.openDB(getServletContext());String sql = "{call `myPagingTest`(?,?,?,?)}";CallableStatement cs = conn.prepareCall(sql);cs.setInt(1, 1);cs.setInt(2, 1);cs.setInt(3, 5);cs.registerOutParameter(4, Types.INTEGER);rs = cs.executeQuery();System.out.println(cs.getInt(4));while(rs.next()){out.println(rs.getInt(1)); out.println(rs.getInt(2)); out.println(rs.getString(3) + "<br>"); }} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{ try {if(rs != null){rs.close();}if(db!=null){db.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} }
本文出自:億恩科技【1tcdy.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|