第一次做論壇,寫了一個查詢方法,請各位大大來幫我看看是否太大了

Q088發表於2006-03-31

	public static ArrayList searchSort() {		
		int sortid;
		ResultSet rst_sort= null;
		ResultSet rst_master= null;
		ResultSet rst_topicNum = null;
		ResultSet rst_responseNum = null;
		ResultSet rst_topic = null;
		
		Statement stmt_sort = null;
		PreparedStatement stmt_master = null;
		PreparedStatement stmt_topicNum = null;
		PreparedStatement stmt_responseNum = null;
		PreparedStatement stmt_topic = null;		
		Connection connection = DBConnection.createConnection();// 獲取連線
		ArrayList result = new ArrayList();		
		try {			
			stmt_sort = connection.createStatement();
			//查詢論壇的詳細資訊
			rst_sort= stmt_sort.executeQuery("select * from bbssort");
			//查詢論壇版主名稱
			stmt_master = connection.prepareStatement("select master from bbsmaster where sortid = ?");
			//查詢每個論壇的主題總數
			stmt_topicNum = connection.prepareStatement("select count(*) from bbstopic where sortid = ?");
			//查詢每個論壇回帖總數
			stmt_responseNum = connection.prepareStatement("select count(*) from bbsresponse where sortid = ?");
			//查詢每個論壇的最新主題資訊
			stmt_topic = connection.prepareStatement("select * from bbstopic where sortid = ? order by topictime desc");
			
			while (rst_sort.next()) {
				Sort sort = new Sort(); //構造論壇分類資訊模型物件
				sortid = rst_sort.getInt("sortid");// 得到論壇分類id
				sort.setId(sortid);//獲得論壇id編號
				sort.setName(rst_sort.getString("sortname"));// 獲得論壇分類名稱
				/** <1> **/
				stmt_master.setInt(1, sortid);// 執行第一個預編譯 sql查詢論壇版主名稱
				rst_master = stmt_master.executeQuery();
				if( rst_master.next() )					
					sort.setMaster(rst_master.getString("master"));// 獲得論壇版主名稱
				/** <2> **/
				stmt_topicNum.setInt(1, sortid);// 執行第二個預編譯 sql查詢論壇討論區中文章的數量
				rst_topicNum = stmt_topicNum.executeQuery();
				if (rst_topicNum.next())
					sort.setTopicNum(rst_topicNum.getInt(1));
				/** <3> **/
				stmt_responseNum.setInt(1, sortid);// 執行第三個預編譯sql 查詢每個論壇回帖的總數
				rst_responseNum = stmt_responseNum.executeQuery();
				if( rst_responseNum.next() )
					sort.setResponseNum(rst_responseNum.getInt(1));
				/** <4> **/
				stmt_topic.setInt(1, sortid);// 執行第四個預編譯sql 查詢每篇文章的基本資訊
				rst_topic = stmt_topic.executeQuery();
				if (rst_topic.next()) {
					sort.setLastTopicId(rst_topic.getInt("topicid"));//獲得最新發表的主題ID編號
					sort.setLastTopic(rst_topic.getString("topicname"));//獲得最新發表的主題名稱
					sort.setLastTopicOwner(rst_topic.getString("topicowner"));//獲得主題作者
					//獲得最新發表時間
					sort.setLastTopicTime(DateFormat.getDateTimeInstance().format(rst_topic.getDate("topictime")));
				}
				
				result.add(sort);//論壇模型物件放入自動增長陣列中
			}
			return result;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		} finally {
			//關閉查詢論壇分類的記錄集
			DBConnection.releaseResultSet(rst_sort);
			DBConnection.releaseStatement(stmt_sort);
			//關閉查詢論壇版主的記錄集
			DBConnection.releaseResultSet(rst_master);
			DBConnection.releaseStatement(stmt_master);
			//關閉查詢主題總數的記錄集
			DBConnection.releaseResultSet(rst_topicNum);
			DBConnection.releaseStatement(stmt_topicNum);
			//關閉查詢回帖總數的記錄集
			DBConnection.releaseResultSet(rst_responseNum);
			DBConnection.releaseStatement(stmt_responseNum);
			//關閉查詢最新發表主題資訊的記錄集
			DBConnection.releaseResultSet(rst_topic);
			DBConnection.releaseStatement(stmt_topic);
			//關閉資料庫連線,回收連線池
			DBConnection.releaseConnection(connection);
		}
	}
<p class="indent">

小弟我水平不足,經驗也沒有,不知道這樣的一個方法是否過於龐大
我也想過分成幾個方法來寫,但是一分開就不能用到PreparedStatement預執行語句了,而且又要另外的再獲取連線.
我有四個PreparedStatement預查詢都是基於第一個Statement的查詢結果的
哪位大大幫我看看,出個好點的主意,謝謝!

相關文章