From aa0346bae79f15b0b5b23f3efb9d95a25603abdd Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Mon, 5 Nov 2018 08:49:22 -0500 Subject: [PATCH] Made column names appear regardless of table size --- .../autopsy/contentviewers/SQLiteViewer.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/SQLiteViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/SQLiteViewer.java index 9c09ca01ca..01226b7a52 100755 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/SQLiteViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/SQLiteViewer.java @@ -424,7 +424,7 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer { try (Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery( - "SELECT count (*) as count FROM " + "\"" + tableName + "\"")) { //NON-NLS{ + "SELECT count (*) as count FROM " + "\"" + tableName + "\"")) { //NON-NLS numRows = resultSet.getInt("count"); numEntriesField.setText(numRows + " entries"); @@ -442,9 +442,21 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer { } else { exportCsvButton.setEnabled(false); nextPageButton.setEnabled(false); - selectedTableView.setupTable(Collections.emptyList()); - } - + + //Execute a dummy SELECT * statement so that we know what + //column names exist in the schema, even if the table is empty.. + Map columnRow; + try (ResultSet metaDataResultSet = statement.executeQuery( + "SELECT * FROM " + "\"" + tableName + "\"")) { + ResultSetMetaData metaData = metaDataResultSet.getMetaData(); + columnRow = new LinkedHashMap<>(); + for(int i = 1; i < metaData.getColumnCount(); i++){ + columnRow.put(metaData.getColumnName(i), ""); + } + } + + selectedTableView.setupTable(Collections.singletonList(columnRow)); + } } catch (SQLException ex) { logger.log(Level.SEVERE, String.format("Failed to load table %s from DB file '%s' (objId=%d)", tableName, sqliteDbFile.getName(), sqliteDbFile.getId()), ex); //NON-NLS MessageNotifyUtil.Message.error(Bundle.SQLiteViewer_selectTable_errorText(tableName));