结果集存储到具有单元格的表的String数组中

时间:2014-07-18 11:52:07

标签: java swing jtable resultset tablecellrenderer

您好我是使用JT的JT的新手, 我有一个来自我的数据库的多个rresult,它存储在resultset中。 我的问题是我在jtable中使用了cellrendered,我没有任何办法,只能将结果集存储在String [] []或Object [] []中。

String[] columnNames = {"Employee ID", "Firstname","Lastname", "Position"};
String[][] database;//This is where i need to put the result set
DefaultTableModel model = new DefaultTableModel(database,columnNames){
    public Class getColumnClass(int column){
        return getValueAt(1, column).getClass();
    }
};

这是创建表格的功能

private JComponent createData(DefaultTableModel model)
{
        JTable table = new JTable( model )
        {
            public Component prepareRenderer(TableCellRenderer renderer, int row, int     column)
            {
                Component c = super.prepareRenderer(renderer, row, column);
                if (!isRowSelected(row))
                {
                    c.setBackground(getBackground());
                   int modelRow = convertRowIndexToModel(row);
                String type = (String)getModel().getValueAt(modelRow, 1);
                if ("Nick".equals(type)) c.setBackground(Color.GREEN);
                if ("Leth".equals(type)) c.setBackground(Color.YELLOW);`
            }

            return c;
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(0, 0, false, false);
    table.setAutoCreateRowSorter(true);
    JScrollPane scrollPane = new JScrollPane( table );
    scrollPane.setBounds(252, 11, 404, 402);
    return scrollPane;
}

这是我调用函数创建表getContentPane().add(createData(model));的地方,而String [] []数据库变量是从数据库插入数据的方法。 这是我进入谷歌的方式,到目前为止我没有任何想法在cellrendered这就是为什么我认为我需要存储在String [] []中的结果集为我完成我的目标。 这是我从数据库中获取数据的地方

public void loadList(){
    String sql = "SELECT emp_id,lname,fname,positional_status from tblEmployee";
    try{
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        while (rs.next()){
          //what goes here to populate my data fetch from database and put in
          // String[][] database?
        }
    }catch(Exception err){
        JOptionPane.showMessageDialog(null, err);
    }

}

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

以下帖子可能对您有帮助。

为了您的学习和更好的理解,请阅读有关How to Use Tables的更多信息,其中说明了自定义渲染器和其他示例以及详细示例代码。

答案 1 :(得分:0)

可能的第一步是从String[][]制作ResultSet。我假设您希望能够显示的最大行数,所以我在此处包含了这个想法。这只是为了展示迭代如何工作的基本思路。此处,maximumRowsnumberOfColumnsresultSet已在范围内并已初始化。

String[][] data = new String[maximumRows][numberOfColumns];
for (int rowNum = 0; rowNum < maximumRows && resultSet.next(); rowNum++) {
    for (int columnNum = 0; columnNum < numberOfColumns; columnNum++ ) {
        Object value = resultSet.getObject(columnNum + 1);
        if (value != null) {
            data[rowNum][columnNum] = value.toString();
        }
    }
}

这里的一个关键点是第二行的resultSet.next()。这是导致ResultSet从一行移动到下一行的原因。如果没有更多数据,它也会返回false

获得String[][]后,您可以将其传递给DefaultTableModel的构造函数,甚至可以直接传递给JTable,具体取决于您的表格的要求。