2

彼は私がJavaに慣れていないため(それは新しいことではありません)、これに関する適切なチュートリアルが見つかりません。jTable を使用して、MySQL データベースからのデータで満たされたテーブルを表示します。

これまでのところ、私はテーブルを取得します:

テーブルのプレビュー

標準では、表のセルをクリックすると、テキスト フィールドに変わり、新しいものを入力できます。ご存知のとおり、これを使用してデータベースの値も更新するにはどうすればよいでしょうか?

私のコード:

import [...];
public class table extends JPanel {
    public String table;
    private Database db;

    public table(String tablename, Database db){

        try {
            table = tablename;
            this.db = db;

            //Get table with and height
            ResultSet res = db.query("SELECT COUNT( * ) FROM `"+table+"`");
            ResultSet res2 = db.query("SELECT COUNT( * ) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '"+table+"'");

            int rows = 0;
            int collums = 0;

            res.next();
            res2.next();

            rows = res.getInt(1);
            collums = res2.getInt(1);

            //Get table column names and set then in array
            ResultSet clom = db.query("DESCRIBE  `"+table+"`");

            String[] columnNames = new String[collums];

            int s = 0;

            while(clom.next()){
                columnNames[s] = clom.getString(1);
                s++;
            }

            //get table data and put in array
            Object[][] data = new Object[rows][collums];

            ResultSet result = db.query("SELECT * FROM `"+table+"`");

            int q = 0;

            while(result.next()){
                for(int a=0; a<= (collums - 1); a++){
                    data[q][a] = result.getString(a + 1);
                    //System.out.println(q + " - " + a);
                }
                q++;
            }

            //Make Jtable of the db result form the two array's
            final JTable table = new JTable(data, columnNames);
            table.setPreferredScrollableViewportSize(new Dimension(500, 70));
            table.setFillsViewportHeight(true);

            // do some event listening for cell change

            JScrollPane scrollPane = new JScrollPane(table);
            JFrame frame = new JFrame("table editor");
            scrollPane.setOpaque(true);
            frame.setContentPane(scrollPane);
            frame.pack();
            frame.setSize(600, 800);
            frame.setVisible(true);
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
}

ある種のテーブルリスナーをバインドする必要があると思います。何かが変更された場合、テーブルのすべての値を取得してクエリで更新します。

これどうやってするの?

これは私の擬似コードです:

table.bindCellEventListner(callback(t){
     Array row = t.getAllValuesAsArrayOfRow();

     String data = "";

     int f = 0
     while(row.next()){
         data .= "`"+clom[f]+"` = '"+row[f]+"',"
         f++;
     }
     data.delLastChar();
     db.query("UPDATE `"+table+"` SET "+data+" WHERE `id` ="+row[0]+";");

});
4

1 に答える 1