有一张表T_a 两个字段Id,XXX。
数据会不断的增加,Id自增。
需求每隔十秒过来读一次,然后记下读到哪个Id了,记下来。如果数据增加了,然后下一次来就接着读。那么这个Id要存在哪里合适呢?肯定是要一个静态的成员变量。
另外没十秒读一次,怎么实现合适呢?起一个线程然后sleep?那connection用不用释放呢?
高手帮忙分析下好不?
数据会不断的增加,Id自增。
需求每隔十秒过来读一次,然后记下读到哪个Id了,记下来。如果数据增加了,然后下一次来就接着读。那么这个Id要存在哪里合适呢?肯定是要一个静态的成员变量。
另外没十秒读一次,怎么实现合适呢?起一个线程然后sleep?那connection用不用释放呢?
高手帮忙分析下好不?
解决方案 »
- 为什么我每次配置struts2,老出现404。
- MyEclipse6.0.1+Tomcat发布时出现问题:严重: Error initializing endpoint java.lang.Exceptio
- 用dom解析xml,所有的xml解析都出現[#document: null],请求帮助
- HQL语句的问题!
- 兄弟姐妹们都快来帮帮忙把!!!(在线等待)
- Tomcat注册后不能启动服务???
- Proguard混淆WEB项目的问题
- 我在装oracle 9i时,总报错:加在数据库时出错,请问是什么原因?问题怎样解决啊?谢谢!
- 用JBuidler9和Weblogic7部署entity bean时出错
- java发送post请求需要注意的问题
- 急~!~hibernet HQL返回值问题~
- <action name=""><result>.</result></action>的作用是列出web应用下的文件请求。那么怎么调用这个
public boolean Executive=true;//定义变量是否执行读取数据
public static void findData(){
string sql="select * from T_a where id>"+Id;
//假设Connection:con、PreparedStatement:ps、ResultSet:rs对象已准备好
while(rs.next())
{
Id=rs.getInt("id");//Id在这里会接收到最后一条数据的Id
.....
}
rs.close();
con.close();//最好要关闭资源
}public static void timeSleep()
{
while(Executive)
{
findData();
Thread.sleep(10000);// 此线程延迟10秒
}}public static void mian(String args[]){ timeSleep();
//如果想停止读取可以修改Executive为false;
}
设置间隔为10秒就可以了
取数据的用3楼的就可以
import java.util.Timer;
import java.util.TimerTask;public class TimeTask {
public static void main(String[] args) {
TimeTask tTask=new TimeTask();
tTask.timeVoid();
}
public void timeVoid(){
final Timer timer = new Timer();
TimerTask tt=new TimerTask() {
@Override
public void run() {
System.out.println("到点啦!");
timer.cancel();
}
};
timer.schedule(tt, 10000);
}
}网上的方法,参考一下
public class TreeSetDemo {
public static void main(String[] args) {
TreeSetDemo tTask=new TreeSetDemo();
tTask.timeVoid(); }
public void timeVoid(){
final Timer timer = new Timer();
TimerTask tt=new TimerTask() {
@Override
public void run() {
System.out.println("到点啦!");
// timer.cancel();
}
};
timer.schedule(tt, 1000,1000);//从一秒后开始,每隔一秒执行一次
}}
如果用定时轮询,那么要涉及thread控制,在j2ee环境里面开thread也不是容易的事情。
所以轮询数据库不是好的办法。如果是同一个应用在insert数据,那就在insert的时候做逻辑;
如果是另外一个应用在insert数据,那可以考虑让那个应用通知您的应用去读数据。
int delay = 1000*5; //milliseconds
Timer time = new Timer();
TimerTask task = new TimerTask(){
public void run(){
try{
//Thread.sleep(10000);
}catch(Exception e){
e.printStackTrace();
}
}
};
time.schedule(task, delay,1000*60*60);