0

私は現在、MySQLでJTableを学習しようとしています。データベースをJTableに設定し、スクロールペインを使用してGUIに追加しました。

私の質問は、ボタンをクリックするたびにデータベースを更新したり、検索操作を実行したりする機能を作成するにはどうすればよいですか(どちらも同じです..)。

これが私のコードです(データベース情報を.iniファイルに読み込んでいます)

final Vector columnNames = new Vector();
        final Vector data = new Vector();

        try
        {
            //  Connect to an Access Database



            driver = IniFonksiyon.iniSVNOkut(driver, "databaseBilgileri", "driver");//"com.mysql.jdbc.Driver";
            url = IniFonksiyon.iniOkut(url, "databaseBilgileri", "url");//"jdbc:mysql://localhost:3306/";
            userid = IniFonksiyon.iniOkut(userid, "databaseBilgileri", "kullanici");
            password = IniFonksiyon.iniOkut(password, "databaseBilgileri", "sifre");
            dbName = IniFonksiyon.iniOkut(dbName, "databaseBilgileri", "dbIsmi");

            Class.forName( driver );
            Connection connection = DriverManager.getConnection( url+dbName , userid, password );

            //  Read data from a table

            String sql = "select * from profildb.tbl_detailed";
            Statement stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery( sql );

            ResultSetMetaData md = rs.getMetaData();
            int columns = md.getColumnCount();

            //  Get column names

            for (int i = 1; i <= columns; i++)
            {
                columnNames.addElement( md.getColumnName(i) );
            }

            //  Get row data

            while (rs.next())
            {
                Vector row = new Vector(columns);

                for (int i = 1; i <= columns; i++)
                {
                    row.addElement( rs.getObject(i) );
                }

                data.addElement( row );
            }

            rs.close();
            stmt.close();
            connection.close();
        }
        catch(Exception e)
        {
            System.out.println( e );
        }

        //  Create table with database data

        final JTable table = new JTable(data, columnNames)
        {
            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            public Class getColumnClass(int column)
            {
                for (int row = 0; row < getRowCount(); row++)
                {
                    Object o = getValueAt(row, column);

                    if (o != null)
                    {
                        return o.getClass();
                    }
                }

                return Object.class;
            }
        };

これはテーブルの作成を処理するコードですが、メインのGUI関数に直接接続されているので、検索関数などの別の操作を更新/実行するにはどうすればよいですか?

4

1 に答える 1

2

テーブルモデルを使用する方が簡単です。関連するチュートリアルを参照してください。DefaultTableModelまたは独自の実装を使用できますTableModel。ニーズを満たさない場合は、通常、拡張がAbstractTableModel最も一般的なアプローチです。DefaultTableModel

Swingアプリケーションのパフォーマンスと応答性を向上させるには、 EDTで長時間実行されるタスクを実行しないでください。したがって、EDT以外のスレッドからデータベースにアクセスするのが最善です。

SwingWorkerはそのような目的に使用できます。のデータベースからデータを取得しますSwingWorker.doInBackground()。次に、でモデルをビルドまたは更新しますSwingWorker.done()

このような実装には多くのバリエーションがあります。これらは、アプリケーションの性質と要件に固有のものです。たとえば、SwingWorkerのpublish()/process()タンデムを使用してデータをチャンクで処理できます。データベースアクセスロジックをモデルに組み込むか、を拡張するコマンドを作成するかを選択できますSwingWorker

于 2012-07-08T04:12:39.677 に答える