java程序,每隔3秒查询30条数据出来,对每条数据进行处理,处理完删除数据,查询数据时有时候报异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序,每隔3秒查询30条数据出来,对每条数据进行处理,处理完删除数据,查询数据时有时候报异常相关的知识,希望对你有一定的参考价值。

异常原因:java.sql.sqlexception: Closed Connection
数据库连接采用的是jdbc连接池
数据库与java程序在一台服务器上,系统是linux的
删除的时候,有时候也会报这个异常

参考技术A 连接使用问题,没获取一次连接,就应当是可用连接。
如果获取是正常的,那么就是你使用问题,使用的时候看看是不是操作了同一个连接。当你第一步操作结束后,后续你应当获取连接新分配的连接。追问

每次查询完,都关闭了连接
开始查询的时候,都是重新获取的连接,连接获取完,执行查询就报java.sql.sqlexception: Closed Connection异常
有一定的概率报这个异常,不是每次查询都出异常

追答

连接池又不是你自己写的。关闭连接的时候应当考虑同步的问题。因为连接池中的连接,其他程序调用。你本地线程还未结束,或许其他即close连接,会导致连接中断。

本回答被提问者采纳
参考技术B 楼下说的很对啊 参考技术C 没3秒查询一次
我觉得你这个连接根本就不用关掉。。
参考技术D 请用连接池来管理
你这个错误有可能是网络的 也有可能是因为超过了最大的链接数量 自动关闭了连接

Java分页查询--分页显示

  当数据库中数据条数过多时,一个页面就不能显示,这是要设置分页查询,首先要使用的是数据库sql语句的limit条件实现分组查询
sql语句大概形式为:
  select * from table limit 开始索引,显示条数
  用该语句就会实现分块查询,并且每页显示固定条数。
首先要实现后台分页,我们需要知道它有多少页,每页有多少行,这就需要知道一共多少行,调用sql语句时还需要知道每一页的开始索引,开始索引是根据当前页数算出来的,所以还需要知道当前页数,查询后会返回一个列表存储当前页数据。将这些属性及获取设置的方法封装成一个类就有了下面的page类:

技术分享
 1 public class Page<T> {
 2     private List<T> data;//数据列表
 3     private int pagenum;//当前页数
 4     private int pagesize;//当前页显示条数
 5     private int rows;//总行数
 6     public Page(int rows,int pagenum, int pagesize) {
 7         super();
 8         data=new ArrayList<>();
 9         this.rows=rows;
10         this.setPagesize(pagesize);
11         this.setPagenum(pagenum);        
12     }
13     public Page() {
14         super();
15     }
16     public int getPagenum() {
17         return pagenum;
18     }
19     public void setPagenum(int pagenum) {
20         if(pagenum>getTotalpage())
21         {
22             this.pagenum=getTotalpage();
23         }
24         else {
25             this.pagenum = pagenum;
26         }    
27         if(pagenum<1)
28         {
29             this.pagenum=1;
30         }
31     }
32     public int getPagesize() {
33         return pagesize;
34     }
35     public void setPagesize(int pagesize) {
36         this.pagesize = pagesize;
37     }
38     public int getTotalpage() {
39         //计算总页数
40         if(rows%pagesize==0)
41         {
42             return rows/pagesize;
43         }
44         else {
45             return rows/pagesize+1;
46         }        
47     }
48     public int getRows() {
49         return rows;
50     }
51     public void setRows(int rows) {
52         this.rows = rows;
53     }
54     public int getIndexnum() {
55         //获取索引值
56         return pagesize*(pagenum-1);
57     }
58     public List<T> getData() {
59         return data;
60     }
61     public void setData(List<T> data) {
62         this.data = data;
63     }
64 }
Page类

初始化时我们只需要获得数据总条数,页数及每页显示条数。数据总条数可以用sql语句select count(*)from table 获得。每次查询时只需要传入当前页数就可以了。将每次查询后的page对象传入jsp前台页面,并以一个div来显示

技术分享
 1 <div>
 2         <a href="/stuent8.11/stuServlet?pagenum=1">首页</a>
 3         <a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum-1 }">上一页</a>
 4         <c:choose>
 5             <c:when test="${apage.totalpage<=5 }">
 6                 <c:set var="begin" value="1"></c:set>
 7                 <c:set var="end" value="${apage.totalpage }"></c:set>
 8             </c:when>
 9             <c:when test="${apage.totalpage>5 }">
10                 <c:set var="begin" value="1"></c:set>
11                 <c:set var="end" value="5"></c:set>
12                 <c:if test="${apage.pagenum>3 }">
13                     <c:set var="begin" value="${apage.pagenum-2 }"></c:set>
14                     <c:set var="end" value="${apage.pagenum+2 }"></c:set>
15                 </c:if>
16                 <c:if test="${end>apage.totalpage }">
17                     <c:set var="begin" value="${apage.totalpage-4 }"></c:set>
18                     <c:set var="end" value="${apage.totalpage }"></c:set>
19                 </c:if>
20             </c:when>
21         </c:choose>
22         <c:forEach begin="${begin }" end="${end }" step="1" var="num">
23             <c:if test="${apage.pagenum==num }">
24                 [${num }]
25             </c:if>
26             <c:if test="${apage.pagenum!=num }">
27                 <a href="/stuent8.11/stuServlet?pagenum=${num }">${num }</a>    
28             </c:if>
29         </c:forEach>
30         <a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum+1 }">下一页</a>
31         <a href="/stuent8.11/stuServlet?pagenum=${apage.totalpage }">末页</a>
32     </div>
显示div

其中的一个choose是用于规定页面显示的最大页数,这里是5页,就是说当点到第4页是时,第1页就会消失,出现第6页。





以上是关于java程序,每隔3秒查询30条数据出来,对每条数据进行处理,处理完删除数据,查询数据时有时候报异常的主要内容,如果未能解决你的问题,请参考以下文章

查询数据库的时候 可以查询出每隔一段时间(比如2小时)这段时间段前3条数据

SQL SERVER 数据库中几百万数据查询优化

Java小项目之:旅游网站

sql查询总记录以及 查询每条光缆下的所涉及到表的信息

Java小项目之:旅游网站

怎么查询SQL语数据条数?