Connection is closed
阿新 • • 發佈:2018-11-01
錯誤程式碼如下:
錯誤程式碼如下:
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也是