2012-01-28 2 views
4

トリガからJavaプログラムを呼び出すいくつかのMySQLコードを作成しようとしています。Javaトリガによって実行されるJava

CREATE TRIGGER trig_name after insert ON studentinfo 
FOR EACH ROW 
BEGIN 

END 

トリガコンテンツは、Javaプログラムを呼び出します。ここでは

は、私がこれまで持っているものです。これは可能ですか?

+0

をあなたが読んで、1)[スイングチュートリアル](http://docs.oracle.com/javase/tutorial/uiswing/を試してみてcomponents/index.html)2)[JDBCデータベースアクセス](http://docs.oracle.com/javase/tutorial/jdbc/index.html)3)[MySql tutorial/examples](http://www.java2s .com/Code/SQL/CatalogSQL.htm) – mKorbel

答えて

5

直接的な答え:いいえ、あなたはmysqlトリガーからjavaメソッドを呼び出すことはできません。 oracleデータベースがあればできますが、mysqlはできません。

はあなたが
  • は、データベースがまたスイングアプリケーションに通知更新するコードを作ることができるのmysqlで何をしたいのかすることができません。または、
  • スイングアプリから定期的に読み取る別のテーブルに、保留中の操作に関するデータを蓄積するようにトリガーを設定します。
1

SQLデータベースからjavaメソッドを呼び出すことは標準的な機能ではありません。 Informix DBはストアドプロシージャからシェルスクリプトを呼び出すことができますが、MySQLのような機能はわかりません(私はMySQLの専門家ではありません)。

すべてのデータベースで最も機能するのは、スレッドを持ち、定期的に新しいレコードをデータベースにポーリングすることです。

SELECT * FROM studentinfo WHERE id > last_seen_id 

それとも、タイムスタンプを使用できます。この場合

SELECT * FROM studentinfo WHERE create_date >= last_seen_create_date 

すでに前回の実行からロードした重複行をフィルタする必要がありますが。

+0

[リンク](http://docs.oracle.com/cd/B14117_01/java.101/b12021/storproc.htm)これはmysql @stackerで可能です – xyz

+2

@xyz:いいえ、それは不可能です。 MySQLは、トリガーとプロシージャの他の言語をサポートしていません。トリガがデータベースサーバ上で動作し、Swingプログラム(完全に別のマシン上で実行される)を「呼び出す」ことができなくなるので、助けにならないでしょう –

+0

@a_horse_with_no_name thx !! – xyz

8

これは標準機能ではありませんが、これはMySQLでも可能です。トリガ内からSELECT .. INTO OUTFILE文を使用すると、名前付きパイプ(Windows)またはmemroyファイルシステム(Linux)に書き込むことができます。どちらも、Javaコード(またはその他のコード)から簡単に監視できます。この手法を使用すると、ポーリングを避けることができます。また、実際のディスクアクセスが行われないため、パフォーマンスが向上します。

私はこれを実際に行うためにJavaパッケージを作成していますので、100%確実に実行でき、うまく動作します。残念ながら私はここで自分の努力を分かち合うことはできません(私の以前の回答は司会者によって削除されました)ので、あなた自身でそれをコードする必要があります。

+0

ああ、それは大丈夫です!ありがとうございます。あなたの助けをありがとう:) – xyz

1

私はジョニに反対する必要があり、これを見て:
MySQLUDFJavaLauncher
Instructions

+2

リンクのみの回答を投稿しないでください。ここのリンクにあるものを要約して、あなたの答えに加えてリンクを投稿してみてください。 –

+0

申し訳ありませんが、あなたは絶対に正しいです。このリンクはbitbucketリポジトリにつながり、ここで私はMySQLユーザがMySQLトリガ内でJavaメソッドを呼び出すことを可能にするMySQL UDF実装をコミットしました。 – user35934

関連する問題