Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * 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 java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.swing.table.*;
- import javax.swing.*;
- import javax.swing.event.TableModelEvent;
- 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 = "localhost:3306/base"; //your data
- String user = "root"; //your data
- String password = "root"; //your data
- String query = "select * from people"; //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);
- JScrollPane panelScroll = new JScrollPane(table);
- JPanel panelButt = new JPanel();
- panelButt.setPreferredSize(new Dimension(150, 100));
- final JTextField[] fields = new JTextField[2];
- for (int i = 0; i < fields.length; i++) {
- fields[i] = new JTextField(10);
- panelButt.add(fields[i]);
- }
- JButton buttonAdd = new JButton("Add");
- buttonAdd.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- try {
- String lastIdQuery = "SELECT MAX(people.ID) FROM people ";
- ResultSet lastIdRs = st.executeQuery(lastIdQuery);
- int val = ((Number) lastIdRs.getObject(1)).intValue();
- Statement stmt = con.createStatement();
- String sql = "INSERT INTO people " +
- "VALUES (" + val + ", '" + fields[0].getText() + "', '" + fields[1].getText() + "')";
- stmt.executeUpdate(sql);
- ResultSet rs = st.executeQuery(query);
- model.setDataSource(rs);
- } catch (SQLException ex) {
- Logger.getLogger(DatabaseTableModel.class.getName()).log(Level.SEVERE, null, ex);
- } catch (ClassNotFoundException ex) {
- Logger.getLogger(DatabaseTableModel.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- });
- panelButt.add(buttonAdd);
- JButton buttonDel = new JButton("Del");
- buttonDel.addActionListener(new ActionListener () {
- public void actionPerformed(ActionEvent e) {
- try {
- Statement stmt = con.createStatement();
- String sql = "DELETE FROM people " +
- " WHERE id = (SELECT x.id " +
- " FROM (SELECT MAX(t.id) AS id " +
- " FROM people t) x)";
- stmt.executeUpdate(sql);
- ResultSet rs = st.executeQuery(query);
- model.setDataSource(rs);
- } catch (SQLException ex) {
- Logger.getLogger(DatabaseTableModel.class.getName()).log(Level.SEVERE, null, ex);
- } catch (ClassNotFoundException ex) {
- Logger.getLogger(DatabaseTableModel.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- });
- panelButt.add(buttonDel);
- JFrame frame = new JFrame("Database Table Model");
- frame.add(panelScroll);
- frame.add(panelButt,BorderLayout.WEST);
- frame.setLocationRelativeTo(null);
- frame.setSize(500, 400);
- frame.pack();
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setVisible(true);
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement