2011-12-02 20 views
2

ソフトウェアの開発中に、stringとして格納されているステートメントを実行する必要があります。例えば言う:上記の例で実行時に動的にJPanelにコンポーネントを追加する

String test = " int a; "; 

、私は変数aを宣言したいです。

String sqlquery ="SELECT * FROM FULLDETAILS WHERE Classname = 'test' "; 
      con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/executable","root","mysql"); 
      st = (Statement) con.createStatement(); 
      rs = st.executeQuery(sqlquery); 
         ^

私もJava文のためにこれを達成したい:

別の例としては、stringからのMySQL文の実行です。方法はありますか?

EDIT:与えられた

上記は一例であり、実際の状況は非常に異なっている(しかし、私は基本的に必要なことは同じです)。

状況は、私はjpanelsの数を持っていて、それにいくつかのコンポーネントを追加したいと言うと、labelというラベルの内容はデータベースから取得され、その実行時にしかわかりませんどのパネルにコンポーネントを追加すべきですか?なりますテストの値になります

String test = " jpanel " + i + " .add(jlabel1); " ; 

jpanel1.add(jlabel1); // provided i is a string with value of i is 1 
この場合、私は10 jpanelsを持っている場合、私はのような文字列を使用すると考えていたと言う、名前で panelを指定することはできません

これを実行したいと思います。方法はありますか?

+4

なぜそれをしたいですか? – yannis

+0

シンプルではありません。 AFAIK、標準のJREにはコンパイラは含まれていません。さらに、すべてのローカル変数には別の名前を付けることができます。可能であれば、おそらく文字列から新しいクラスを作成するだけです。 – fuz

+0

@YannisRizos編集をご覧ください!私はアイデアを伝えることに成功したかどうかはわかりませんが、私にはこれが必要だと私は信じています.Dはそこにありますか? – COD3BOY

答えて

8

おそらくそれはあなたが望むものではありませんが、Javaの Reflection APIを使用して、メソッドなどを(たとえば)文字列に基づいて慎重に呼び出すことができます。

SQL文は、内部Javaによって実際には実行されないため、JDBC接続の反対側にある追加のSQL Serverによって処理されるため、大きく異なります。

どこかで、あなたはすべてのあなたのパネルの最初のリストを持っていなければならないか、起動時にそれを作成するか、または私は右だ場合は何? あなたは、それらを保持するためのデータ構造を見つける必要があります(例えば、HashMapは適しているようです)。すべてのパネルを追加し、キーを使用してそれらを取得し、必要に応じてラベルを追加します。

ラフ例:プログラムの実行時に

Map<Integer, Panel> panelMap = ... 
for(int i = 1; i < 10; i++) { 
    Panel panel = new Panel(); 
    panelMap.put(i, panel); 
} 

panelMap.get(1).addLabel(labelForPanel1); (for all labels) 

変数名は、彼らがすべてのオブジェクトである、多かれ少なかれ無関係です。あなたのニーズに合ったほうがいいと思いますが、今は完全に見逃してしまいました:)

+0

問題の編集をご覧ください。 :) – COD3BOY

3

Javaのeval()関数のようなものです。私が知る限り、JavaはJavaを提供していませんが、スクリプト言語をサポートしています。

StackOverflowでquestionが見つかりました。そこの答えを見てください。あるいは、JEXLをチェックしてください。これはApacheプロジェクトです。以前はプロジェクトでこれをうまく使用しました。

関連する問題