簡體   English   中英

為什么JTable僅顯示第一行數據?

[英]Why does JTable only present 1st row of data?

我開始學習如何使用數據庫,並嘗試將h2數據庫中的數據導出到JTable中。 該表提供了正確的行數,但是,只有第一行填充了數據。 其余為空白網格。 我在下面為JTable發布了一些代碼。 如果有人需要查看更多代碼,我將其發布。

public class Table extends JTable{

    public static int rows;
    public static String[][] data;
    public static String[] columns = {"Author", "Customer", "Date"};

    public static void populateTable() throws ClassNotFoundException, SQLException{

//Server is name of the database class
        Server server = new Server();

        Statement stat = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);        
        ResultSet rs = stat.executeQuery("SELECT * FROM data");
        rs.last();
        rows = rs.getRow();
        rs.beforeFirst();

        data = new String[3][rows];

        while(rs.next()){
           int i = 0;
           data[0][i] = rs.getString("Author");
           data[1][i] = rs.getString("Customer");
           data[2][i] = rs.getString("Date");
           System.out.println(rs.getString("Author"));
           i = i++;
        }
        rs.close();
    }
}

class MyTableModel extends DefaultTableModel{

        String[] columnNames = {"Author", "Customer", "Date"};

        MyTableModel() throws ClassNotFoundException, SQLException{
            addColumn(columnNames[0]);
            addColumn(columnNames[1]);
            addColumn(columnNames[2]);
        }

        @Override
        public int getRowCount() {
            return rows;
        }

        @Override
        public int getColumnCount() {
            return 3;
        }

        @Override
        public String getColumnName(int columnIndex) {
            return columnNames[columnIndex];
        }

        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
                return data[columnIndex][rowIndex];

    }

我還可以將所有數據打印到控制台,但是不會顯示在JTable中。 我已經在這個問題上停留了幾個小時,但是我不知道自己在做什么錯。 提前致謝

此語句是空操作,因為在遞增之前已分配了i

i = i++;

只是使用

i++;

在進入循環之前還要初始化i

您應該使用for循環或在循環之外聲明i。 就目前而言,您正在將所有數據設置為行0(int i = 0);

while(rs.next()){
           int i = 0; // this will run for every row
           data[0][i] = rs.getString("Author");
           data[1][i] = rs.getString("Customer");
           data[2][i] = rs.getString("Date");
           System.out.println(rs.getString("Author"));
           i = i++;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM