Made column names appear regardless of table size

This commit is contained in:
U-BASIS\dsmyda 2018-11-05 08:49:22 -05:00
parent b3e3278eee
commit aa0346bae7

View File

@ -424,7 +424,7 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
try (Statement statement = connection.createStatement(); try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery( ResultSet resultSet = statement.executeQuery(
"SELECT count (*) as count FROM " + "\"" + tableName + "\"")) { //NON-NLS{ "SELECT count (*) as count FROM " + "\"" + tableName + "\"")) { //NON-NLS
numRows = resultSet.getInt("count"); numRows = resultSet.getInt("count");
numEntriesField.setText(numRows + " entries"); numEntriesField.setText(numRows + " entries");
@ -442,9 +442,21 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
} else { } else {
exportCsvButton.setEnabled(false); exportCsvButton.setEnabled(false);
nextPageButton.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<String, Object> 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) { } 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 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)); MessageNotifyUtil.Message.error(Bundle.SQLiteViewer_selectTable_errorText(tableName));