Advertisement
Guest User

Untitled

a guest
Nov 29th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.00 KB | None | 0 0
  1. /**
  2.  * This model work with any database table. You should only set an object of java.sql.ResultSet into it.
  3.  * This table cannot insert data into database.
  4.  */
  5.  
  6. import java.util.*;
  7. import java.sql.*;
  8. import java.awt.*;
  9. import java.awt.event.ActionEvent;
  10. import java.awt.event.ActionListener;
  11. import java.util.logging.Level;
  12. import java.util.logging.Logger;
  13. import javax.swing.table.*;
  14. import javax.swing.*;
  15. import javax.swing.event.TableModelEvent;
  16.  
  17. public class DatabaseTableModel extends AbstractTableModel {
  18.     private static final long serialVersionUID = 1L;
  19.     private ArrayList<String> columnNames = new ArrayList<String>();
  20.     private ArrayList<Class> columnTypes = new ArrayList<Class>();
  21.     private ArrayList<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>();
  22.  
  23.     public int getRowCount() {
  24.         synchronized (data) {
  25.             return data.size();
  26.         }
  27.     }
  28.  
  29.     public int getColumnCount() {
  30.         return columnNames.size();
  31.     }
  32.  
  33.     public Object getValueAt(int row, int col) {
  34.         synchronized (data) {
  35.             return data.get(row).get(col);
  36.         }
  37.     }
  38.  
  39.     public String getColumnName(int col) {
  40.         return columnNames.get(col);
  41.     }
  42.  
  43.     public Class getColumnClass(int col) {
  44.         return columnTypes.get(col);
  45.     }
  46.  
  47.     public boolean isCellEditable(int row, int col) {
  48.         return true;
  49.     }
  50.  
  51.     public void setValueAt(Object obj, int row, int col) {
  52.         synchronized (data) {
  53.             data.get(row).set(col, obj);
  54.         }
  55.     }
  56.  
  57.     /**
  58.      * Core of the model. Initializes column names, types, data from ResultSet.
  59.      *
  60.      * @param rs ResultSet from which all information for model is token.
  61.      * @throws SQLException
  62.      * @throws ClassNotFoundException
  63.      */
  64.     public void setDataSource(ResultSet rs) throws SQLException, ClassNotFoundException {
  65.         ResultSetMetaData rsmd = rs.getMetaData();
  66.         columnNames.clear();
  67.         columnTypes.clear();
  68.         data.clear();
  69.  
  70.         int columnCount = rsmd.getColumnCount();
  71.         for (int i = 0; i < columnCount; i++) {
  72.             columnNames.add(rsmd.getColumnName(i + 1));
  73.             Class type = Class.forName(rsmd.getColumnClassName(i + 1));
  74.             columnTypes.add(type);
  75.         }
  76.         fireTableStructureChanged();
  77.         while (rs.next()) {
  78.             ArrayList rowData = new ArrayList();
  79.             for (int i = 0; i < columnCount; i++) {
  80.                 if (columnTypes.get(i) == String.class)
  81.                     rowData.add(rs.getString(i + 1));
  82.                 else
  83.                     rowData.add(rs.getObject(i + 1));
  84.             }
  85.             synchronized (data) {
  86.                 data.add(rowData);
  87.                 this.fireTableRowsInserted(data.size() - 1, data.size() - 1);
  88.             }
  89.         }
  90.     }
  91.    
  92.     //***TEST***
  93.     public static void main(String[] args) {
  94.        
  95.         try {
  96.             Class.forName("com.mysql.jdbc.Driver");
  97.             String url = "localhost:3306/base";                //your data
  98.             String user = "root";                  //your data
  99.             String password = "root";               //your data
  100.             String query = "select * from people";  //your data
  101.             Connection con = DriverManager.getConnection("jdbc:mysql://" + url, user, password);
  102.             Statement st = con.createStatement();
  103.             ResultSet rs = st.executeQuery(query);
  104.             DatabaseTableModel model = new DatabaseTableModel();
  105.             model.setDataSource(rs);
  106.             JTable table = new JTable(model);
  107.             JScrollPane panelScroll = new JScrollPane(table);
  108.            
  109.             JPanel panelButt = new JPanel();
  110.             panelButt.setPreferredSize(new Dimension(150, 100));
  111.            
  112.             final JTextField[] fields = new JTextField[2];
  113.             for (int i = 0; i < fields.length; i++) {
  114.             fields[i] = new JTextField(10);
  115.             panelButt.add(fields[i]);
  116.             }
  117.            
  118.             JButton buttonAdd = new JButton("Add");
  119.             buttonAdd.addActionListener(new ActionListener() {
  120.                 @Override
  121.                 public void actionPerformed(ActionEvent e) {
  122.                     try {          
  123.                         String lastIdQuery = "SELECT MAX(people.ID) FROM people ";
  124.                         ResultSet lastIdRs = st.executeQuery(lastIdQuery);
  125.                         int val =  ((Number) lastIdRs.getObject(1)).intValue();
  126.                         Statement stmt = con.createStatement();
  127.                         String sql = "INSERT INTO people " +
  128.                                 "VALUES (" + val + ", '" + fields[0].getText() + "', '" + fields[1].getText() + "')";
  129.                         stmt.executeUpdate(sql);
  130.                         ResultSet rs = st.executeQuery(query);
  131.                         model.setDataSource(rs);
  132.                                          
  133.                        
  134.                     } catch (SQLException ex) {
  135.                         Logger.getLogger(DatabaseTableModel.class.getName()).log(Level.SEVERE, null, ex);
  136.                     } catch (ClassNotFoundException ex) {
  137.                         Logger.getLogger(DatabaseTableModel.class.getName()).log(Level.SEVERE, null, ex);
  138.                     }
  139.                 }
  140.             });
  141.             panelButt.add(buttonAdd);
  142.            
  143.             JButton buttonDel = new JButton("Del");
  144.             buttonDel.addActionListener(new ActionListener () {
  145.                 public void actionPerformed(ActionEvent e) {
  146.                     try {
  147.                         Statement stmt = con.createStatement();
  148.                         String sql = "DELETE FROM people " +
  149.                             " WHERE id = (SELECT x.id " +
  150.                             " FROM (SELECT MAX(t.id) AS id " +
  151.                             " FROM people t) x)";
  152.                         stmt.executeUpdate(sql);
  153.                         ResultSet rs = st.executeQuery(query);
  154.                         model.setDataSource(rs);
  155.                     } catch (SQLException ex) {
  156.                         Logger.getLogger(DatabaseTableModel.class.getName()).log(Level.SEVERE, null, ex);
  157.                     } catch (ClassNotFoundException ex) {
  158.                         Logger.getLogger(DatabaseTableModel.class.getName()).log(Level.SEVERE, null, ex);
  159.                     }
  160.                 }
  161.             });
  162.             panelButt.add(buttonDel);
  163.            
  164.            
  165.             JFrame frame = new JFrame("Database Table Model");
  166.            
  167.             frame.add(panelScroll);
  168.             frame.add(panelButt,BorderLayout.WEST);
  169.             frame.setLocationRelativeTo(null);
  170.             frame.setSize(500, 400);
  171.             frame.pack();
  172.             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  173.             frame.setVisible(true);
  174.  
  175.         } catch (SQLException e) {
  176.             e.printStackTrace();
  177.         } catch (ClassNotFoundException e) {
  178.             e.printStackTrace();
  179.         }
  180.     }
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement