Thursday 2 July 2015

CRUD operations using Swings

CRUD operations using MySQL database and Swings GUI

Step 1 :

Create an table in MySQL,

CREATE TABLE Person(
   personId int (30) NOT NULL,
   firstName varchar (30) NOT NULL,
   middleName varchar (30) NOT NULL,
   lastName varchar (30) NOT NULL,
   email varchar (30) NOT NULL,
   phone varchar (30) NOT NULL,
   PRIMARY KEY (personId)
);

Step 2 :

Create a entity class that will act as a persistent object. This class is a POJO, used for convenience as a reference entity object while interacting with the controller bean from GUI classes

public class Person {
   private int personId;
   private String firstName;
   private String middleName;
   private String lastName;
   private String email;
   private String phone;
   //...constructors, getters, and setters
}

Step 3 :

The controller bean PersonBean is the heart of our JDBC application. Every communication with the database is accomplished through this controller.
 Also, here we have used JdbcRowSet to access all information to and from the graphical interface from the database. These two classes (Listing 1 andListing 2) will be same for every GUI framework used down the line

public class PersonBean {
   static final String JDBC_DRIVER =  "com.mysql.jdbc.Driver";
   
   //Replace your database name,username and password respectively
   static final String DB_URL =  "jdbc:mysql://localhost:3306/mydatabase";
   static final String DB_USER = "user1";
   static final String DB_PASS = "secret";
   private JdbcRowSet rowSet = null;
   
   public PersonBean() {
      try {
         Class.forName(JDBC_DRIVER);
         rowSet = new JdbcRowSetImpl();
         rowSet.setUrl(DB_URL);
         rowSet.setUsername(DB_USER);
         rowSet.setPassword(DB_PASS);
         rowSet.setCommand("SELECT * FROM Person");
         rowSet.execute();

      catch (SQLException | ClassNotFoundException ex) {
         ex.printStackTrace();
      }
   }
   public Person create(Person p) {
      try {
         rowSet.moveToInsertRow();
         rowSet.updateInt("personId", p.getPersonId());
         rowSet.updateString("firstName", p.getFirstName());
         rowSet.updateString("middleName", p.getMiddleName());
         rowSet.updateString("lastName", p.getLastName());
         rowSet.updateString("email", p.getEmail());
         rowSet.updateString("phone", p.getPhone());
         rowSet.insertRow();
         rowSet.moveToCurrentRow();
      } catch (SQLException ex) {
         try {
            rowSet.rollback();
            p = null;
         } catch (SQLException e) {

         }
         ex.printStackTrace();
      }
      return p;
   }

   public Person update(Person p) {
      try {
         rowSet.updateString("firstName", p.getFirstName());
         rowSet.updateString("middleName", p.getMiddleName());
         rowSet.updateString("lastName", p.getLastName());
         rowSet.updateString("email", p.getEmail());
         rowSet.updateString("phone", p.getPhone());
         rowSet.updateRow();
         rowSet.moveToCurrentRow();
      } catch (SQLException ex) {
         try {
            rowSet.rollback();
         } catch (SQLException e) {

         }
         ex.printStackTrace();
      }
      return p;
   }

   public void delete() {
      try {
         rowSet.moveToCurrentRow();
         rowSet.deleteRow();
      } catch (SQLException ex) {
         try {
            rowSet.rollback();
         } catch (SQLException e) { }
         ex.printStackTrace();
      }

   }

   public Person moveFirst() {
      Person p = new Person();
      try {
         rowSet.first();
         p.setPersonId(rowSet.getInt("personId"));
         p.setFirstName(rowSet.getString("firstName"));
         p.setMiddleName(rowSet.getString("middleName"));
         p.setLastName(rowSet.getString("lastName"));
         p.setEmail(rowSet.getString("email"));
         p.setPhone(rowSet.getString("phone"));

      } catch (SQLException ex) {
         ex.printStackTrace();
      }
      return p;
   }

   public Person moveLast() {
      Person p = new Person();
      try {
         rowSet.last();
         p.setPersonId(rowSet.getInt("personId"));
         p.setFirstName(rowSet.getString("firstName"));
         p.setMiddleName(rowSet.getString("middleName"));
         p.setLastName(rowSet.getString("lastName"));
         p.setEmail(rowSet.getString("email"));
         p.setPhone(rowSet.getString("phone"));

      } catch (SQLException ex) {
         ex.printStackTrace();
      }
      return p;
   }

   public Person moveNext() {
      Person p = new Person();
      try {
         if (rowSet.next() == false)
            rowSet.previous();
         p.setPersonId(rowSet.getInt("personId"));
         p.setFirstName(rowSet.getString("firstName"));
         p.setMiddleName(rowSet.getString("middleName"));
         p.setLastName(rowSet.getString("lastName"));
         p.setEmail(rowSet.getString("email"));
         p.setPhone(rowSet.getString("phone"));

      } catch (SQLException ex) {
         ex.printStackTrace();
      }
      return p;
   }

   public Person movePrevious() {
      Person p = new Person();
      try {
         if (rowSet.previous() == false)
            rowSet.next();
         p.setPersonId(rowSet.getInt("personId"));
         p.setFirstName(rowSet.getString("firstName"));
         p.setMiddleName(rowSet.getString("middleName"));
         p.setLastName(rowSet.getString("lastName"));
         p.setEmail(rowSet.getString("email"));
         p.setPhone(rowSet.getString("phone"));

      } catch (SQLException ex) {
         ex.printStackTrace();
      }
      return p;
   }

   public Person getCurrent() {
      Person p = new Person();
      try {
         rowSet.moveToCurrentRow();
         p.setPersonId(rowSet.getInt("personId"));
         p.setFirstName(rowSet.getString("firstName"));
         p.setMiddleName(rowSet.getString("middleName"));
         p.setLastName(rowSet.getString("lastName"));
         p.setEmail(rowSet.getString("email"));
         p.setPhone(rowSet.getString("phone"));
      } catch (SQLException ex) {
         ex.printStackTrace();
      }
      return p;
   }

}

Step 4 : Person GUI Class,

public class PersonUI extends JPanel {

   private JTextField idField = new JTextField(10);
   private JTextField fNameField = new JTextField(30);

   //... mNameField, lNameField, emailField, phoneField

   private JButton createButton = new Jbutton("New...");
   //... updateButton, deleteButton, firstButton, prevButton, nextButton,
   //...lastButton
   private PersonBean bean = new PersonBean();

   public PersonUI() {
      setBorder(new TitledBorder
      (new EtchedBorder(),"Person Details"));
      setLayout(new BorderLayout(5, 5));
      add(initFields(), BorderLayout.NORTH);
      add(initButtons(), BorderLayout.CENTER);
      setFieldData(bean.moveFirst());
   }

   private JPanel initButtons() {
      JPanel panel = new JPanel();
      panel.setLayout(new FlowLayout(FlowLayout.CENTER, 3, 3));
      panel.add(createButton);
      createButton.addActionListener(new ButtonHandler());
      //...
      panel.add(lastButton);
      lastButton.addActionListener(new ButtonHandler());
      return panel;
   }

   private JPanel initFields() {
      JPanel panel = new JPanel();
      panel.setLayout(new MigLayout());
      panel.add(new JLabel("ID"), "align label");
      panel.add(idField, "wrap");
      idField.setEnabled(false);
      panel.add(new JLabel("First Name"), "align label");
      panel.add(fNameField, "wrap");
      //...
      panel.add(new JLabel("Phone"), "align label");
      panel.add(phoneField, "wrap");
      return panel;
   }

   private Person getFieldData() {
      Person p = new Person();
      p.setPersonId(Integer.parseInt(idField.getText()));
      p.setFirstName(fNameField.getText());
      p.setMiddleName(mNameField.getText());
      p.setLastName(lNameField.getText());
      p.setEmail(emailField.getText());
      p.setPhone(phoneField.getText());
      return p;
   }

   private void setFieldData(Person p) {
      idField.setText(String.valueOf(p.getPersonId()));
      fNameField.setText(p.getFirstName());
      mNameField.setText(p.getMiddleName());
      lNameField.setText(p.getLastName());
      emailField.setText(p.getEmail());
      phoneField.setText(p.getPhone());
   }

   private boolean isEmptyFieldData() {
      return (fNameField.getText().trim().isEmpty()
         && mNameField.getText().trim().isEmpty()
         && lNameField.getText().trim().isEmpty()
         && emailField.getText().trim().isEmpty()
         && phoneField.getText().trim().isEmpty());
   }

   private class ButtonHandler implements ActionListener {
      @Override
      public void actionPerformed(ActionEvent e) {
         Person p = getFieldData();
         switch (e.getActionCommand()) {
         case "Save":
            if (isEmptyFieldData()) {
               JOptionPane.showMessageDialog(null,
               "Cannot create an empty record");
               return;
            }
            if (bean.create(p) != null)
               JOptionPane.showMessageDialog(null,
               "New person created successfully.");
               createButton.setText("New...");
               break;
         case "New...":
            p.setPersonId(new Random()
            .nextInt(Integer.MAX_VALUE) + 1);
            p.setFirstName("");
            p.setMiddleName("");
            p.setLastName("");
            p.setEmail("");
            p.setPhone("");
            setFieldData(p);
            createButton.setText("Save");
            break;
         case "Update":
            if (isEmptyFieldData()) {
               JOptionPane.showMessageDialog(null,
               "Cannot update an empty record");
               return;
            }
            if (bean.update(p) != null)
               JOptionPane.showMessageDialog(
               null,"Person with ID:" + String.valueOf(p.getPersonId()
               + " is updated successfully"));
               break;
         case "Delete":
            if (isEmptyFieldData()) {
               JOptionPane.showMessageDialog(null,
               "Cannot delete an empty record");
               return;
            }
            p = bean.getCurrent();
            bean.delete();
            JOptionPane.showMessageDialog(
               null,"Person with ID:"
               + String.valueOf(p.getPersonId()
               + " is deleted successfully"));
               break;
         case "First":
            setFieldData(bean.moveFirst()); break;
         case "Previous":
            setFieldData(bean.movePrevious()); break;
         case "Next":
            setFieldData(bean.moveNext()); break;
         case "Last":
            setFieldData(bean.moveLast()); break;
         default:
            JOptionPane.showMessageDialog(null,
            "invalid command");
         }
      }
   }

}

Step 5 : Main class to view Person GUI,

public class AppMain {
   public static void main(String[] args) {
      JFrame f=new JFrame();
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
      f.getContentPane().add(new PersonUI());
      f.setSize(600, 280);
      f.setVisible(true);
   }

}

Output sample,

JDBC1



No comments:

Post a Comment