Как отобразить имя таблицы в базе данных в JTable? - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу получить все имена таблиц, которые есть в базе данных, и отобразить их в JTable.

Это печать:

con =  DriverManager.getConnection("jdbc:h2:C:/SimpleGST/GST/INVOICES","sa","");
String[] types = {"TABLE"};
DatabaseMetaData metadata = con.getMetaData();
ResultSet resultSet = metadata.getTables(null, null, "%", types);
while (resultSet.next()) {
    String tableName = resultSet.getString(3);
    System.out.println(tableName);
    table.setModel(net.proteanit.sql.DbUtils.resultSetToTableModel(resultSet));
}

Он печатает имена таблиц, но не отображается в таблице.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018
Vector columnNames = new Vector();
    columnNames.addElement("Table");

    DefaultTableModel model = new DefaultTableModel(columnNames, 0);
    try{con = DriverManager.getConnection("your url");
        String[] types = {"TABLE"};
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet resultSet = metadata.getTables(null, null, "%", types);


            while (resultSet.next()) 
            {

                Vector row = new Vector();
                row.addElement( resultSet.getString(3) );
                model.addRow(row);
            }

            table = new JTable(model  );
            scrollPane = new JScrollPane( table );
            scrollPane.setBounds(10, 11, 724, 639);
            contentPane.add( scrollPane );
            scrollPane.setViewportView(table);

спасибо @camickr за код. Я не пойму это без вашей помощи. спасибо человек

0 голосов
/ 01 сентября 2018
while (resultSet.next()) 
{
    String tableName = resultSet.getString(3);
    System.out.println(tableName);
    table.setModel(net.proteanit.sql.DbUtils.resultSetToTableModel(resultSet));
}

У вас есть цикл while, который продолжает заменять модель каждой строкой данных, которые вы читаете. Таким образом, все данные из ResultSet были прочитаны при последней попытке установить модель.

Смысл использования метода resultSetToTableModel(...) в том, что он будет читать все данные из ResultSet для вас и создавать TableModel. Так что цикл while пока не нужен.

Вам необходимо заменить вышеуказанный код одной строкой кода:

table.setModel(net.proteanit.sql.DbUtils.resultSetToTableModel(resultSet));

Edit:

но он показывает слишком много других столбцов .. я просто хочу отобразить таблицы

Затем вам нужно создать модель таблицы вручную. Код будет что-то вроде:

Vector columnNames = new Vector();
columnNames.addElement("Table");

DefaultTableModel model = new DefaultTableModel(columnNames, 0);

while (resultSet.next()) 
{
    Vector row = new Vector();
    row.addElement( resultSet.getString(3) );
    model.addRow(row);
}

table = new JTable( model );
scrollPane.setViewportView( table );
...