我想将mysql表内容与JTable
绑定。我成功连接了。我将表格行和宽度设置为500.它将显示500行,包括数据和空。现在我想只查看数据。我不想查看空行。
请帮帮我
插入方法getRowCountFromDB()
后,我的应用程序变慢了。
class AbstractTableEmployee extends AbstractTableModel {
int row2;
private String[] columnNames = { "ID", "Name", "Company", "Department", "Location", "Mobile NO" , "Shift" };
private Object[][] data = new Object[500][500];
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
int row = 0;
try {
row = this.count();
} catch (SQLException ex) {
Logger.getLogger(AbstractTableEmployee.class.getName()).log(Level.SEVERE, null, ex);
}
return row;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
private int getRowCountFromDB() throws SQLException {
Connection con = (Connection) DBConnection.getDBConnection();
int row = 0;
Statement st = null;
ResultSet rs = null;
String Sql = "Select * from Employee_Master where status = 'Active'";
try {
st = (Statement) con.createStatement();
rs = st.executeQuery(Sql);
while (rs.next())
{
row++;
}
}
finally {
con.close();
rs.close();
st.close();
}
return row;
}
private int count() throws SQLException {
return this.getRowCountFromDB();
}
}
提前致谢。
答案 0 :(得分:3)
JTable
的文档提供了以下有关如何将表与自定义表模型一起使用的示例。
TableModel dataModel = new AbstractTableModel() {
public int getColumnCount() { return 10; }
public int getRowCount() { return 10;}
public Object getValueAt(int row, int col) { return new Integer(row*col); }
};
JTable table = new JTable(dataModel);
JScrollPane scrollpane = new JScrollPane(table);
这是您必须提供的最小实现。
修改强>
有关如何有效获取行计数的信息,请参阅MySQL参考中的3.3.4.8 Counting Rows。在我看来,当你想要的只是一个数字时,你正在拿整张桌子。
你想要的东西是
Select COUNT(*) from Employee_Master where status = 'Active'
然后只是阅读那个价值。
至于你的data
,我认为没有理由让它有500列,因为你的表似乎只有7列。
无论如何,根据表的大小,您可能不希望同时拥有所有数据。如果是这种情况,您可以根据用户滚动的JTable
中的位置始终获取和缓存行的块。您可以使用LIMIT。
对于其他一些想法和提示,您还应该看一下涵盖类似问题的question。
答案 1 :(得分:2)
正如另一张海报所提到的更好,之前会阅读JTable
教程,因为文字中的一点点加密,你的方法是JTable#setValueAt(Object aValue, int row, int column),