Miral Miral - 1 month ago 13
Java Question

Adding column names and row data to table model

When I try to add column names and row data to table model, I get null pointer exception. Column names come from list and i add them to table model as array. But in there I get the exception:

tableModel.addColumn(columnNames.toArray());
tableModel.addRow(rowData);


My full code:

public class DBC extends JFrame{

static String tablo;
static JTextField tf = new JTextField(20);
static int columnCount;
static JPanel tfPanel = new JPanel();
static String[] sutunlar;
static JLabel sutunLabel;
static JPanel sutunPanel = new JPanel(new BorderLayout());
static JTable table;
static JScrollPane scrollPane;
static DefaultTableModel tableModel;
static Object[] columnNames;

public static void main(String[] args) throws Exception {

Class.forName("com.mysql.jdbc.Driver");
Connection connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/project"
,"root","123456789");

final Statement statement = connect.createStatement();

JLabel tabloSec = new JLabel("Tablo Seçin:");
final JComboBox<String> tablolar = new JComboBox<String>();
final DatabaseMetaData md = connect.getMetaData();
final ResultSet rs = md.getTables(null, null, "%", null);

while (rs.next()) {
tablolar.addItem(rs.getString(3));
}

tablolar.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent arg0) {

tablo = tablolar.getSelectedItem().toString();

try {

ResultSet rs2 = statement.executeQuery("SELECT * FROM "+tablo);
ResultSetMetaData rsmd = rs2.getMetaData();
columnCount = rsmd.getColumnCount();
List<String> columnNames = new ArrayList<String>();
sutunlar = new String[columnCount];

Object rowData[][] = {{""}};


for(int i=0;i<columnCount;i++){

sutunlar[i] = rsmd.getColumnLabel(i+1);
columnNames.add(sutunlar[i]);
tableModel.addColumn(columnNames.toArray());
tableModel.addRow(rowData);

}

tableModel = new DefaultTableModel(rowData, columnNames.toArray());
table = new JTable();
table.setModel(tableModel);
table.repaint();
scrollPane = new JScrollPane(table);
sutunPanel.add(scrollPane);
sutunPanel.revalidate();
sutunPanel.repaint();


} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

JButton ekle = new JButton("Ekle");
ekle.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {

try {
switch(tablo){
case "department":

statement.executeUpdate("INSERT INTO department(Name,Location) VALUES('"+tf.getText()+"')");
case "employee":

statement.executeUpdate("INSERT INTO employee(Id,FirstName,LastName,Sex,Address,Email,Salary,BirthDate,JoinDate) VALUES('"+tf.getText()+"')");
case "engineer":

statement.executeUpdate("INSERT INTO engineer(EngineerType) VALUES('"+tf.getText()+"')");
case "manager":

statement.executeUpdate("INSERT INTO manager(Department) VALUES('"+tf.getText()+"')");
case "project":

statement.executeUpdate("INSERT INTO project(Name,Number,Value) VALUES('"+tf.getText()+"')");
case "secretary":

statement.executeUpdate("INSERT INTO secretary(TypingSpeed) VALUES('"+tf.getText()+"')");
}

} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});

JButton cik = new JButton("Çık");
cik.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

System.exit(0);
}
});

JPanel panel = new JPanel(new FlowLayout());

panel.add(tabloSec);
panel.add(tablolar);
panel.add(sutunPanel);
panel.revalidate();
panel.add(ekle);
panel.add(cik);

JFrame frame = new JFrame("Deneme");
frame.setSize(600,600);
frame.setLocationRelativeTo(null);
frame.add(panel);
frame.setVisible(true);
}
}

Answer

You need to instantiate tableModel before accessing it.