第一次做论坛,写了一个查询方法,请各位大大来帮我看看是否太大了

06-03-31 Q088

	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>

小弟我水平不足,经验也没有,不知道这样的一个方法是否过于庞大

我也想过分成几个方法来写,但是一分开就不能用到PreparedStatement预执行语句了,而且又要另外的再获取连接.

我有四个PreparedStatement预查询都是基于第一个Statement的查询结果的

哪位大大帮我看看,出个好点的主意,谢谢!

banq
2006-03-31 09:39
分割分割再分割,你这是使用Java语言当做过程语言用。

如果想彻底改变这一习惯,使用hibernate等框架改变改变思路。

一剑封喉
2006-04-02 11:46
为什么不使用hibernate阿

这样的代码,只有自己有耐心看

猜你喜欢