保持检查自动增量值是否已更改的有效方法

时间:2016-03-25 20:52:34

标签: java mysql

我正在编写一个Java程序,需要继续检查给定数据库表的自动增量值是否已更改。目前,该程序通过在单独的线程上以无限循环查询数据库来实现此目的。

public class StackOverflow implements Runnable {
    @Override
    public void run()
    {
        while(true)
        {
            // Assume that 'currentMessageID' has already been declared as type integer
            // and that 'getLatestMessageID()' queries the database.
            if(currentMessageID < queryHandler.getLatestMessageID())
            {
                int latestMessageID = queryHandler.getLatestMessageID();
                for(int x = ajaxChat.currentMessageID + 1; x <= latestMessageID; x++)
                {
                    // Do something when the auto increment value is greater than the last
                    // known auto increment value.
                }
            }
        }
    }
}

虽然这很好用,但是自从

以来,它给数据库服务器带来了很大的压力
SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'SOrocks'

一遍又一遍地被召唤。是否有任何方法可以观察自动增量值的变化,而不会反复使用相同的查询来破坏数据库服务器?

1 个答案:

答案 0 :(得分:0)

不幸的是,如果你只能从应用程序端工作,那么轮询db的线程是唯一能让我想到的解决方案但是如果你也可以改变数据库端,你总是可以在数据库上触发调用你的java方法(example with Oracle)。