Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > как загрузить данные из БД в таблицу на форме


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

Код

    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;
    }
}
 

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

Автор: LSD 12.2.2009, 12:22
Попробуй http://www.javafaq.nu/java-example-code-467.html.

Автор: kresh 12.2.2009, 21:24

Пример использования 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. Эффективные пользовательские интерфейсы".

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

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.");
    }

Автор: skif18 23.2.2009, 10:03
Winte, как обращаешся к классу, к методам?

Автор: frikey 25.2.2009, 07:51
Цитата(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;
    }


Метод возвращает двумерный массив строк, а дальше табличку из него создать не проблема.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)