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