Resultset хранится в массиве String для таблицы с ячейками

Здравствуйте, я новичок в использовании JTable Java, у меня есть несколько результатов из моей базы данных, которая хранится в результирующем наборе. Моя проблема в том, что я использую cellrendered в jtable, и у меня нет другого пути, кроме как сохранить набор результатов в 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 [] [] - это способ вставки данных из базы данных. Это способ, которым я попал в Google, до сих пор я не имею ни малейшего представления о 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 ответа

Следующий пост может помочь вам.

Для вашего изучения и лучшего понимания прочитайте больше о том, как использовать таблицы, где показаны пользовательские средства визуализации, и другие примеры вместе с подробным примером кода.

Одним из возможных первых шагов является создание String[][] от твоего ResultSet, Я предполагаю, что будет максимальное количество строк, которое вы хотите отобразить, поэтому я включил эту идею здесь. Это просто чтобы показать основную идею о том, как может работать итерация. Вот, maximumRows, numberOfColumns а также resultSet уже находятся в области видимости и инициализированы.

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в зависимости от требований вашего стола.

Другие вопросы по тегам