0

jTextField と jLabel があります。ユーザーが入力を終了した後、データベースからラベルにデータを自動的に取得したいと考えています。

subcode_txt.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            Object obj=e.getSource();
            if(obj==subcode_txt){
            jst=subcode_txt.getText();
            try{

            rs=st.executeQuery("Select * from facultydtls where sub_code like '"+jst+"'");
            rs.next();
            faculty_lab.setText(rs.getString("f_name"));
            sem_lab.setText(rs.getString("sem"));
            subject_lab.setText(rs.getString("sub"));
            department_lab.setText(rs.getString("dept"));

            rs.close();

        }
        catch(Exception ewt){
            JOptionPane.showMessageDialog(null,"Invalid Subject Code");
        }
            }
        }
    });
4

2 に答える 2

2
  1. ユーザー入力に反応したい場合DocumentListenerは、 a よりも a の方が適していますKeyListener
  2. ActionListenerユーザーがヒットしたときにトリガーされる を選択できますENTER
  3. イベント ディスパッチ スレッドでデータベース クエリを実行しないでください。代わりにワーカー スレッドを使用してください。詳細については、Swingの同時実行を参照してください。
  4. closeステートメントはfinallyブロックに配置する必要があります

そうは言っても、あなたは正確に何を求めていますか?

于 2012-11-01T15:38:00.913 に答える
2

DocumentListenerを使用することはJTextComponents、Swing でテキスト イベントを処理するための推奨される方法です。

データベース クエリは大量のリソースを必要とするため、UI が「フリーズ」するのを防ぐために、 EDTの外部で実行する必要があります。SwingWorkerこのでの使用を見てください。

every のデータをロードするとDocumentEvent、大量の不要なリクエストがデータベースに送信される可能性があることに注意してください。考えられる解決策は 2 つあります。

  • Ehcacheなどのフレームワークを使用したデータ キャッシング- データを最適にロードします。
  • 要件とは多少異なりますが、ユーザーからJButton完全なデータStringが提供されたときに、ロードを使用してデータをロードできます。

アップデート:

短期的には:

SQL ワイルドカード文字をクエリに追加して、部分的な文字列に一致させます。

st.executeQuery("Select * from facultydtls where sub_code like '%" + jst + "%'");

長期的には:

を使用しPreparedStatementます。次の利点があります。

  • 特にユーザーが SQL クエリの一部である文字列を入力できる場合、SQL インジェクション攻撃から保護します。
  • PreparedStatementプレースホルダー文字は、必要な文字列の引用符を取ります。
于 2012-11-01T15:47:18.047 に答える