Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298

Как имеющийся recordset вывести через JTable?

19.04.2010, 20:14. Показов 2731. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь сделать вывод из БД используя jTable (но что-то делаю не так...):

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        ... 
 
        ResultSet rs = stm.executeQuery('select ...');                  
 
       
                String[] tableColumnsName = {'col 1'}; 
                DefaultTableModel aModel = (DefaultTableModel) jTable1.getModel();            
 
 
                aModel.setColumnIdentifiers(tableColumnsName);
                DefaultTableModel aModel = new DefaultTableModel(); 
                
                java.sql.ResultSetMetaData rsmd = rs.getMetaData();
                int colNo = rsmd.getColumnCount();
                while(rs.next()){
                    Object[] objects = new Object[colNo];
                    for(int i=0;i<colNo;i++){
                        objects[i]=rs.getObject(i);
                    }
                    aModel.addRow(objects);
                }
                jTable1.setModel(aModel);
подскажите плз как имеющийся recordset вывести через jTable ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2010, 20:14
Ответы с готовыми решениями:

Редактирование поля: Recordset.edit recordset.Fields('поле') = Text1.text Recordset.update
Есть Recordset базы mdb, некоторые поля в базе пустые. Т.е. Recordset.Fields ('поле') возвращает Null. Когда пытаюсь отредактировать запись...

Как вывести двумерную матрицу в jTable ?
имеется необходимость вывести матрицу в таблицу. матрица может иметь размерность в пределах от 1*1до 9*9... как я узнал необходимо...

Как вывести результат в swing jTable?
Как вывести результат JDBC запроса в swing jTable?

11
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
23.04.2010, 00:42
непонятно совершенно что у тебя за ошибка .. ты бы следующий раз немного того .. поподробнее ..
первое что мне не нравится - ты берёшь у таблицы её дефолтную модель , что то ей сетишь , потом создаёшь совершеннуо новую модель и засовываешь в таблицу уже её ..
врпрос - а зачем в родную сетил то ?
Java
1
2
3
4
5
DefaultTableModel aModel = (DefaultTableModel) jTable1.getModel();
aModel.setColumnIdentifiers(tableColumnsName);
DefaultTableModel aModel = new DefaultTableModel();
...
jTable1.setModel(aModel);
кстати , тебя компилятор не обматерил случайно ?
ты похоже два раза объявляешь одну и ту же переменную 'DefaultTableModel aModel'.
второе что бросается в глаза - индексы для колумнов резалтсета ты начинаешь считать с нуля , что вообще то неверно - первый колумн имеет индекс 1 (особенности JDBC)
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
23.04.2010, 00:44
насчёт индексов , я имею в виду что вот так было бы правильнее:
objects[i] = rs.getObject(i + 1);
0
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
23.04.2010, 00:58  [ТС]
по -поводу двойного объявления и замечаний по засовыванию того же - просто когда в форум пихал код, комментарии в спешке убрал
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
23.04.2010, 01:16
а с индексами - оно ?
0
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
24.04.2010, 02:05  [ТС]
индексы помогли, спасибо.
но почему то выводится только 1 строка из БД (да и то в jTable она находится не в первой строке а в конце) и еще: выводятся только 4 колонки, а в БД их больше.

с сетингами у меня так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
        ...
        DefaultTableModel aModel = (DefaultTableModel) jTable1.getModel();                                      
                java.sql.ResultSetMetaData rsmd = rs.getMetaData();
                int colNo = rsmd.getColumnCount();
                while(rs.next()){
                    Object[] objects = new Object[colNo];
                    for(int i=0;i<colNo;i++){
                        objects[i]=rs.getObject(i+1);
                    }
                    aModel.addRow(objects);
                }
                jTable1.setModel(aModel);
видимо что то не правильно...
можно ли пример как имеющийся recordset вывести в jTable?
0
mishgun
24.04.2010, 20:18
Вынесите эту строку
Object[] objects; перед while
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
24.04.2010, 22:26  [ТС]
спасибо. за такую глупую ошибку даже стыдно

только это все равно ничего не изменило (
0
mishgun
26.04.2010, 05:18
Я бы посоветовал вообще написать свой класс который будет наследовать от AbstractTableModel или DefaultTableModel в котором будет происходить коннект и прочее и потом ставить его параметром в констрактор класса JTable, а так по первости у вас есть методы getRowCount(),getValueAt(int row,int column)?
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
26.04.2010, 14:07  [ТС]
зачем мне писать свой класс когда все есть?
мой вопрос был как вывести имеющийся рекордсет в jtable.
не нужно извращений со своими классами. мне нужен просто простой пример как выполнить этот шаг.
0
costa
27.04.2010, 04:45
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import java.util.Vector;
import java.sql.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.event.TableModelEvent;
 
public class JDBCAdapter extends AbstractTableModel {
    Connection          connection;
    Statement           statement;
    ResultSet           resultSet;
    String[]            columnNames = {};
    Vector      rows = new Vector();
    ResultSetMetaData   metaData;
 
    public JDBCAdapter(String url, String driverName,
                       String user, String passwd) {
        try {
            Class.forName(driverName);
            System.out.println('Opening db connection');
 
            connection = DriverManager.getConnection(url, user, passwd);
            statement = connection.createStatement();
        }
        catch (ClassNotFoundException ex) {
            System.err.println('Cannot find the database driver classes.');
            System.err.println(ex);
        }
        catch (SQLException ex) {
            System.err.println('Cannot connect to this database.');
            System.err.println(ex);
        }
     }
 
    public void executeQuery(String query) {
        if (connection == null || statement == null) {
            System.err.println('There is no database to execute the query.');
            return;
        }
        try {
            resultSet = statement.executeQuery(query);
            metaData = resultSet.getMetaData();
 
            int numberOfColumns =  metaData.getColumnCount();
            columnNames = new String[numberOfColumns];
            // Get the column names and cache them.
            // Then we can close the connection.
            for(int column = 0; column < numberOfColumns; column++) {
                columnNames[column] = metaData.getColumnLabel(column+1);
            }
 
            // Get all rows.
            rows = new Vector();
            while (resultSet.next()) {
                Vector newRow = new Vector();
                for (int i = 1; i <= getColumnCount(); i++) {
                newRow.addElement(resultSet.getObject(i));
                }
                rows.addElement(newRow);
            }
            //  close(); Need to copy the metaData, bug in jdbc:odbc driver.
            fireTableChanged(null); // Tell the listeners a new table has arrived.
        }
        catch (SQLException ex) {
            System.err.println(ex);
        }
    }
 
    public void close() throws SQLException {
        System.out.println('Closing db connection');
        resultSet.close();
        statement.close();
        connection.close();
    }
 
    protected void finalize() throws Throwable {
        close();
        super.finalize();
    }
 
    //////////////////////////////////////////////////////////////////////////
    //
    //             Implementation of the TableModel Interface
    //
    //////////////////////////////////////////////////////////////////////////
 
    // MetaData
 
    public String getColumnName(int column) {
        if (columnNames[column] != null) {
            return columnNames[column];
        } else {
            return '';
        }
    }
 
    public Class getColumnClass(int column) {
        int type;
        try {
            type = metaData.getColumnType(column+1);
        }
        catch (SQLException e) {
            return super.getColumnClass(column);
        }
 
        switch(type) {
        case Types.CHAR:
        case Types.VARCHAR:
        case Types.LONGVARCHAR:
1 / 1 / 3
Регистрация: 03.08.2008
Сообщений: 390
05.05.2010, 16:26
Моно было ограничится ссылкой......
%JAVA_HOME%demojfcTableExamplesrcJDBCAda pter.java

но мало ли можжет люди только JRE пользуют....:-))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2010, 16:26
Помогаю со студенческими работами здесь

Проблемы с кодом Recordset.AddNew() Recordset(0) = '01/02/2002' Recordset.Update()
Recordset.AddNew() Recordset(0) = '01/02/2002' Recordset.Update() //----------дает результат 1 февраля 2002 Recordset.AddNew() ...

Как вывести данные из ADODB.Recordset в MSHFlexGrid?
Здравствуйте! Не могу разобраться с синтаксисом. Соединение открывается, открываю Рекордсет, добавляю записи, а вывести это все в таблицу...

Как все данные в БД (MySQL ) записать в массив ? (Вообще нужно вывести БД в JTable)
Есть подключения к базе данных! Знаю как вывести всю информацию..... while(rs.next()){ rs.getString(1); }

Не возвращаются данные через Connection и Command, получается только через Recordset
Работает: Dim strSQL As String Set RS = New ADODB.Recordset strSQL = 'Select Product from Product' With RS ...

Как записать Как записать в ADO recordset значение NULL через datacombo или textbox?
Перехожу с Access на SQLserver+VB. ADO recordset открыт через DataEnvironment, client-side, LockOptimistic. Пытаюсь на Validate...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru