|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Староверъ : 7629 Ктапубеп Откуда: Elfland
|
Авг 29, 2008 14:06 |
|
|
Пример использования 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<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>();
public int getRowCount() {
synchronized (data) {
return data.size();
}
}
public int getColumnCount() {
return columnNames.size();
}
public Object getValueAt(int row, int col) {
synchronized (data) {
return 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 isCellEditable(int row, int col) {
return true;
}
public void setValueAt(Object obj, int row, int col) {
synchronized (data) {
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. Эффективные пользовательские интерфейсы".
Последний раз редактировалось: Староверъ (Ноя 01, 2009 13:26), всего редактировалось 2 раз(а) |
|
|
|
 |
Vlad : 1670 JavaTalks Team Member Откуда: ODS-KRK-LON-HFE
|
Май 14, 2009 14:02 |
|
|
В примере есть один очень нехороший баг: незакрытый источник данных, который не используется после полного копирования из него данных.
П.С. Неплохо было бы добавить пример для обновляемого ResultSet с подгрузкой данных on-demand. |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Примеры |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|