I have a JTable. And I've added the column to it within a method like this.
private void createSearchResultTable() {
DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
String columnNames[] = {"Title", "Author", "Edition", "Availability", "Reserve"};
for (int i = 0; i < columnNames.length; i++) {
TableColumn column = new TableColumn();
column.setHeaderValue(columnNames[i]);
columnModel.addColumn(column);
}
tblBookSearchResults.setColumnModel(columnModel);
ButtonColumn buttonColumn = new ButtonColumn(tblBookSearchResults, reserveBook, 4);
buttonColumn.setMnemonic(KeyEvent.VK_ENTER);
}
Now I'm populating the JTable with data retrieved from a MySQL database.
private boolean populateSearchResultTable(String title, String author, String publisher) {
con = DatabaseHandler.connectToDb();
try {
if (title.trim().length() != 0) {
pst = con.prepareStatement("SELECT title, author, edition, status FROM book WHERE title LIKE ? ");
pst.setString(1, "%" + title + "%");
}
else if (author.trim().length() != 0) {
// Say, this query is getting executed
pst = con.prepareStatement("SELECT title, author, edition, status FROM book WHERE author LIKE ? ");
//pst.setString(1, "%" + author + "%");
pst.setString(1, "Dan");
}
else if (publisher.trim().length() != 0) {
pst = con.prepareStatement("SELECT title, author, edition, status FROM book WHERE publisher LIKE ? ");
pst.setString(1, "%" + publisher + "%");
}
rs = pst.executeQuery();
int rowNum = 0;
while (rs.next()) {
tblBookSearchResults.setValueAt(rs.getString(1), rowNum, 1);
}
return true;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getLocalizedMessage());
}
finally {
}
return false;
}
The data set is retrieved without an issue but when I'm setting the values to the JTable, it looks like this.
The first value gets repeated in all columns. I can't figure out why this is happening? Any suggestion on how to correct this would be appreciated.
Thank you.