为什么 JTable 只显示第一行数据?
Why does JTable only present 1st row of data?
我开始学习如何使用数据库,并试图将数据从我的 h2 数据库导出到 JTable。 table 给出了正确的行数,但是,只有第一行填充了数据。其余的是空白网格。我在下面为 JTable post编辑了一些代码。如果有人需要查看更多代码,我会 post 它。
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++;
}
我开始学习如何使用数据库,并试图将数据从我的 h2 数据库导出到 JTable。 table 给出了正确的行数,但是,只有第一行填充了数据。其余的是空白网格。我在下面为 JTable post编辑了一些代码。如果有人需要查看更多代码,我会 post 它。
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++;
}