2017-05-07 18 views
1

誰でもmysqlのテーブルに入力された新しいデータの存在を知るために、5秒ごとのスキャンを行うためにJavaで関数を作成する方法を、私を助けることができます。のjavaを持つテーブルのSQLをスキャンごとに5秒

+0

解決策としてmysqlトリガを使用できるとします。あなたが試したことを分かち合うと助けになるかもしれません。 –

+0

@Rajith - トリガでこれをどのように解決できますか? – GurV

+0

@adjieq - これまでに試したことはありますか? 、私はプログラミング言語の初心者です – GurV

答えて

1

ここにコードがあります。

java.util.TimerTask task = new java.util.TimerTask() { 
     int prevCount = 0; // you can declare it static 
     @Override 
     public void run() { 
      Connection conn = getConnection(); 
      try { 
       ResultSet rs = conn.prepareStatement("Select Count(*) from table").executeQuery(); 
       int count = rs.getInt(1); 
       System.out.println("Count diff:"+ (prevCount-count)); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }; 
    java.util.Timer timer = new java.util.Timer(true);// true to run timer as daemon thread 
    timer.schedule(task, 0, 5000);// Run task every 5 second 
    try { 
     Thread.sleep(60000); // Cancel task after 1 minute. 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    timer.cancel(); 
+0

最初は実行中にエラーが発生し、次に 'int count = rs.getInt(1); 'を入力しようとしましたが、" while "ループにはもうエラーはなく、なぜそうであるのか分かりません。しかし、 ありがとう、この問題を解決するのに非常に役立つコードです。 – adjieq

1

大きなテーブル(特に大きなテーブル)で検索を行うのは大変です。したがって、おそらく、新しいデータを別の方法で検出することによって、テーブルの読み込み量を減らすことができます。実際のデータをフェッチする前に

たとえば、テーブルのサイズを確認することができます。これを行うには、単に "テーブルからカウント(*)を選択"操作を実行するか、ここでのようにディスク上のテーブルのサイズを計算することもできます:How to get the sizes of the tables of a mysql database?

データベーストリガーのバリアントも役立ちます。たとえば、Javaアプリケーションが表示される最後のテーブルの更新のマーカーをトリガーが更新する場合はどうなりますか?この変種はまた、あなたのテーブルのアイドルリードの実行を避けるのに役立ちます。あなたは、DBの変更をスキャンするJavaプログラムを必要としない

+0

あなたの答えに感謝します。基本的な問題は、受信トレイのすべての受信メッセージに対して自動返信を試みることです。受信データを最初に処理する必要があるため制約があります。 – adjieq

0

は、離れて、それがネットワークやDBにコストがかかることになる冗長から、それはすでに標準溶液として与えられている機能を実装することをお勧めではありません。あなたは何ができるか

CREATE TRIGGER `some_update_happened` BEFORE/AFTER INSERT/UPDATE/DELETE 
ON `mydb`.`mytable` 
FOR EACH ROW BEGIN 
    // your code here for db trigger calling java function 
END; 

は、DB更新トリガがthis link & this linkを参照してください使用しています。 トリガを実装した後、私はphp、javaなどで実装されたサービスを使用してトリガを捕捉する必要があると考えます。トリガの自動化を受信するイベントリスナを実装する必要があります。ちょうどdone here for PHPのように、またオークションのドキュメントにはexampleがありますが、これはOracle向けです。ここにはjava+mysqlの例があります。

私は、エラーによりステップバイステップで、エラーを行くと、あなたがそこに着くなり、あなたが初心者で理解しています。がんばろう。あなたは、Javaが提供するタイマー&タイマータスクでそれを行うことができ、唯一のJavaソリューションを必要とする場合には

+1

提案していただきありがとうございます。トリガーを使用すると効率的だと思いますが、トリガーについてもっと知る必要があります – adjieq

+0

トリガーはあまり問題にならないでしょう。これを済ませたら、あなたの経験を共有してください。 – BhargavSushant

関連する問題