Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как загрузить данные из БД в таблицу на форме, не понимаю как вывести в таблицу данные  
:(
    Опции темы
Winte
Дата 12.2.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Здравствуйте! Я новичок в джава. У меня никак не получается вывести данные из бд в таблицу
вот запрос:

Код

    public ArrayList<table> getTestData(Connection c, int ID){
        ArrayList<table> data = new ArrayList<table>();
        try {
            Statement st = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            ResultSet rs = st.executeQuery("SELECT tv, programm, ganr, title, data"+
                    "FROM test WHERE ID="+ID);
            while(rs.next())
            {
                table t = new table();
                t.setID(rs.getInt("ID"));
                t.setTV(rs.getString("tv"));
                t.setProgramm(rs.getString("programm"));
                t.setGanr(rs.getString("ganr"));
                t.setTitle(rs.getString("title"));
                t.setDate(rs.getDate("date"));

                data.add(t);
            }
            st.close();
            c.close();
        } catch (SQLException ex) {
            Logger.getLogger(ButtonsMethods.class.getName()).log(Level.SEVERE, null, ex);
        }
        return data;
    }
 
здесь:
Код

    public JTable getTable(/*final ArrayList<table> newData*/){
        if (t == null)
        {
            t = new JTable(new TableModel() {

                public int getRowCount() {
                   if (newData==null) return 1;
                   return newData.size();

                }

                public int getColumnCount() {
                    return 5;
                }

                public String getColumnName(int columnIndex) {
                    return "";
                }

                public Class<?> getColumnClass(int columnIndex) {
                    return String.class;
                }

                public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return false;
                }

                public Object getValueAt(int rowIndex, int columnIndex) {
                    if (newData.size()!= 0){
                    if (columnIndex==0)
                        return newData.get(rowIndex).getTV();
                    if (columnIndex==1)
                        return newData.get(rowIndex).getProgramm();
                    if (columnIndex==2)
                        return newData.get(rowIndex).getGanr();
                    if (columnIndex==3)
                        return newData.get(rowIndex).getTitle();
                    if (columnIndex==4) 
                        return "";}//newData.get(rowIndex).getDate();}
                    return "";
                   /* switch(columnIndex)
                    {
                        case 0:
                            return newData.get(rowIndex).tv;
                            break;
                        case 1:
                            return newData.get(rowIndex);
                            break;
                        case 4:
                            return newData.get(rowIndex);
                    }*/
                }

                public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
                    //throw new UnsupportedOperationException("Not supported yet.");
                }

                public void addTableModelListener(TableModelListener l) {
                    //throw new UnsupportedOperationException("Not supported yet.");
                }

                public void removeTableModelListener(TableModelListener l) {
                    //throw new UnsupportedOperationException("Not supported yet.");
                }
            });
            for (int i = 0; i<newData.size(); i++)
            {
               // t.setValueAt(newData.get(i), i, i);
            }
        }
        return t;
    }

    javax.swing.JButton getAddButton(){
        if (addB == null)
        {
            addB = new JButton("show");
            addB.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        ButtonsMethods bt = new ButtonsMethods();

                        MyConnection c = new MyConnection();
                        newData = bt.getTestData(c.initConnection(), 0);
                       // t
                    } catch (SQLException ex) {
                        Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }
        return addB;
    }

    javax.swing.JPanel getPanel(){
        if (p==null)
        {
            p = new JPanel();
            p.add(getTable(),BorderLayout.NORTH);
            p.add(getAddButton(), BorderLayout.SOUTH);
        }
        return p;
    }
}
 

я объявляю панель, на ней креплю таблицу и кнопку. На событие (нажатие кнопки) я создаю экземпляр класса, где описан мой запрос, и выполняю его. А вот вывести его не получается

Это сообщение отредактировал(а) Winte - 12.2.2009, 11:54
PM MAIL   Вверх
LSD
Дата 12.2.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Попробуй JDBCTableModel.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
kresh
Дата 12.2.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 1.1.2008
Где: Минск

Репутация: нет
Всего: нет




Пример использования JTable для отображения данных из БД.


Код

/**  
 
 
 * This model work with any database table. You should only set an object of java.sql.ResultSet into it.  
 
 
 * This table cannot insert data into database.  
 
 
 */   
  
  
  
  
  
import java.util.*;   
  
  
import java.sql.*;   
  
  
import java.awt.*;   
  
  
import javax.swing.table.*;   
  
  
import javax.swing.*;   
  
  
  
  
  
public class DatabaseTableModel extends AbstractTableModel {   
  
  
    private static final long serialVersionUID = 1L;   
  
  
    private ArrayList<String> columnNames = new ArrayList<String>();   
  
  
    private ArrayList<Class> columnTypes = new ArrayList<Class>();   
  
  
    private ArrayList data = new ArrayList();   
  
  
  
  
  
    public int getRowCount() {   
  
  
        synchronized (data) {   
  
  
            return data.size();   
  
  
        }   
  
  
    }   
  
  
  
  
  
    public int getColumnCount() {   
  
  
        return columnNames.size();   
  
  
    }   
  
  
  
  
  
    public Object getValueAt(int row, int col) {   
  
  
        synchronized (data) {   
  
  
            return ((ArrayList) data.get(row)).get(col);   
  
  
        }   
  
  
    }   
  
  
  
  
  
    public String getColumnName(int col) {   
  
  
        return columnNames.get(col);   
  
  
    }   
  
  
  
  
  
    public Class getColumnClass(int col) {   
  
  
        return columnTypes.get(col);   
  
  
    }   
  
  
  
  
  
    public boolean isEditable() {   
  
  
        return true;   
  
  
    }   
  
  
  
  
  
    public void setValueAt(Object obj, int row, int col) {   
  
  
        synchronized (data) {   
  
  
            ((ArrayList) data.get(row)).set(col, obj);   
  
  
        }   
  
  
    }   
  
  
  
  
  
    /**  
 
 
     * Core of the model. Initializes column names, types, data from ResultSet.  
 
 
     *  
 
 
     * @param rs ResultSet from which all information for model is token.  
 
 
     * @throws SQLException  
 
 
     * @throws ClassNotFoundException  
 
 
     */   
  
  
    public void setDataSource(ResultSet rs) throws SQLException, ClassNotFoundException {   
  
  
        ResultSetMetaData rsmd = rs.getMetaData();   
  
  
        columnNames.clear();   
  
  
        columnTypes.clear();   
  
  
        data.clear();   
  
  
  
  
  
        int columnCount = rsmd.getColumnCount();   
  
  
        for (int i = 0; i < columnCount; i++) {   
  
  
            columnNames.add(rsmd.getColumnName(i + 1));   
  
  
            Class type = Class.forName(rsmd.getColumnClassName(i + 1));   
  
  
            columnTypes.add(type);   
  
  
        }   
  
  
        fireTableStructureChanged();   
  
  
        while (rs.next()) {   
  
  
            ArrayList rowData = new ArrayList();   
  
  
            for (int i = 0; i < columnCount; i++) {   
  
  
                if (columnTypes.get(i) == String.class)   
  
  
                    rowData.add(rs.getString(i + 1));   
  
  
                else   
  
  
                    rowData.add(rs.getObject(i + 1));   
  
  
            }   
  
  
            synchronized (data) {   
  
  
                data.add(rowData);   
  
  
                this.fireTableRowsInserted(data.size() - 1, data.size() - 1);   
  
  
            }   
  
  
        }   
  
  
    }   
  
  
  
  
  
    //***TEST***   
  
  
    public static void main(String[] args) {   
  
  
        try {   
  
  
            Class.forName("com.mysql.jdbc.Driver");   
  
  
            String url = "database_url";                //your data   
  
  
            String user = "user_name";                  //your data   
  
  
            String password = "password";               //your data   
  
  
            String query = "select * from table_name";  //your data   
  
  
            Connection con = DriverManager.getConnection("jdbc:mysql://" + url, user, password);   
  
  
            Statement st = con.createStatement();   
  
  
            ResultSet rs = st.executeQuery(query);   
  
  
            DatabaseTableModel model = new DatabaseTableModel();   
  
  
            model.setDataSource(rs);   
  
  
            JTable table = new JTable(model);   
  
  
  
  
  
            JPanel panel = new JPanel(new BorderLayout());   
  
  
            panel.add(new JScrollPane(table), BorderLayout.CENTER);   
  
  
  
  
  
            JFrame frame = new JFrame("Database Table Model");   
  
  
            frame.setLocationRelativeTo(null);   
  
  
            frame.setSize(500, 400);   
  
  
            frame.setContentPane(panel);   
  
  
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  
  
            frame.setVisible(true);   
  
  
  
  
  
        } catch (SQLException e) {   
  
  
            e.printStackTrace();   
  
  
        } catch (ClassNotFoundException e) {   
  
  
            e.printStackTrace();   
  
  
        }   
  
  
    }   
  
  
}  




























Источник: 
И. Портянкин "Swing. Эффективные пользовательские интерфейсы".

Это сообщение отредактировал(а) kresh - 12.2.2009, 21:25
--------------------
Спросит вас продавец в магазине формулу Гаусса-Остроградского... А вы ее не знаете!
PM MAIL   Вверх
Winte
Дата 14.2.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



пример портянкина у меня не работает: унаследовались только первые три метода, а в последнем не удалось реализовать двумерный массив
Код

public class dataBase extends AbstractTableModel {
    
    private ArrayList<String> columnNames = new ArrayList<String>();
    private ArrayList data  = new ArrayList();

    public int getRowCount() {
        synchronized(data)
        {
            return data.size();
        }
    }

    public int getColumnCount() {
        return  columnNames.size();
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        synchronized(data)
        {
            return ((ArrayList)) data.get(row)).get(col);
        }//throw new UnsupportedOperationException("Not supported yet.");
    }

PM MAIL   Вверх
skif18
Дата 23.2.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 1



Winte, как обращаешся к классу, к методам?


--------------------

PM MAIL ICQ   Вверх
frikey
Дата 25.2.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior Sys Engineer



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara

Репутация: нет
Всего: нет



Цитата(Winte @ 12.2.2009,  11:53)
Здравствуйте! Я новичок в джава. У меня никак не получается вывести данные из бд в таблицу .....

Сам недавно столкнулся с такой проблемой, и вот как я её решил. Может поможет%

Код

public String[][] executeQuery(String query) throws SQLException {
        ResultSet result = statement.executeQuery(query);
        ArrayList<String[]> rows = new ArrayList<String[]>(); //Each element of this collection contain one row of table from DB.
        String[] tableRow; //Element of rows-collection.

        /* Filling collection */
        while (result.next()) {
            tableRow = new String[result.getMetaData().getColumnCount()];
            for (int i = 1; i <= tableRow.length; i++) {
                tableRow[i - 1] = result.getString(i);
            }
            rows.add(tableRow);
        }

        /* Creating and filling returned string array */
        String[][] dbTableInString = new String[rows.size()][result.getMetaData().getColumnCount()];
        for (int j = 0; j < dbTableInString.length; j++) {
            dbTableInString[j] = rows.get(j);
        }

        result.close();

        return dbTableInString;
    }


Метод возвращает двумерный массив строк, а дальше табличку из него создать не проблема.
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1093 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.