1. 程式人生 > >Connection is closed

Connection is closed

錯誤程式碼如下:

錯誤程式碼如下:

package cn.com.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.com.jdbc.JdbcUtils_DBCP;
import cn.com.pack.StringSeven;
public class BMI_Servlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//第一階段
              //查詢資料庫裡面有的心率血壓指標
		//查詢資料庫有心率血壓而且不重複的編號,
		String sql="SELECT DISTINCT number FROM yh WHERE xl<>'255' AND xl<>'0' AND lpower<>'255'";
		//使用連線
		//初始化
		Connection conn=null;
		PreparedStatement st=null;
		ResultSet rs=null;
		List<String> list=new ArrayList<String>();
		try {
		//與資料庫建立連線
			conn=JdbcUtils_DBCP.getConnection();
			st=conn.prepareStatement(sql);
			rs=st.executeQuery();
			//把結果集放在一個集合裡面,因為涉及多個rs的時候尤其是彼此之間有關聯,最好分開,以免出錯導致連線不能釋放,資料庫連線數滿
			while(rs.next()){
				String number=rs.getString(1);
				list.add(number);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//關閉連線
			JdbcUtils_DBCP.release(conn, st, rs);
		}
		
		//第二階段	
		//根據num查詢心率血壓
		//使用連線
				//初始化
				Connection conn1=null;
				PreparedStatement st1=null;
				ResultSet rs1=null;
				//初始化
				Connection conn2=null;
				PreparedStatement st2=null;
				ResultSet rs2=null;
				String name=null;
				String xl=null;
				String lpower=null;
				String upower=null;
				String time=null;
				List<StringSeven> String_sex=new ArrayList<StringSeven>();
		for (String i : list) {
			String sql1="SELECT * FROM yh WHERE number='"+i+"' AND xl<>'255' AND xl<>'0' AND lpower<>'255' ORDER BY TIME DESC LIMIT 1";	
			//與資料庫建立連線
			try {
				conn1=JdbcUtils_DBCP.getConnection();
				st1=conn.prepareStatement(sql1);
				rs1=st.executeQuery();
				while(rs1.next()){
				xl=rs1.getString(3);	
				lpower=rs1.getString(4);	
				upower=rs1.getString(5);	
				time=rs1.getString(8);
				//根據編號查詢名稱
				String sqls="select name from person_info where number='"+i+"'";
				conn2=JdbcUtils_DBCP.getConnection();
				st2=conn.prepareStatement(sqls);
				rs2=st.executeQuery();
				if(rs2.next()){
					name=rs2.getString(1);
				}
				JdbcUtils_DBCP.release(conn2, st2, rs2);
				}
				
				StringSeven sex=new StringSeven(name, i, xl, lpower, upower, time);
				String_sex.add(sex);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				JdbcUtils_DBCP.release(conn1, st1, rs1);
			}
			
			
		}
		//最後一個階段 封裝 跳轉介面
		request.setAttribute("list", String_sex);
		request.getRequestDispatcher("Scheduling.jsp").forward(request, response);
	
	}



}

 我該關閉的都關閉了啊,不知道怎麼回事,報錯?

錯誤原因-寫法錯誤:

conn已經關閉了,conn1建立連線,但是用的還是conn,所以程式報錯

 

conn2也是