天天看点

java swing 实现数据库的增删查改1 工具 2 代码

最近一个实习生问我,swing好难啊,就是jtable的增删查改都做不出来了,我也好久没有做了,各种文档,各种查找,各种百度终于是完成了一个小的项目,也就是所说的增删除查改。不废话了,上代码。

1 工具

1)IDE 工具:eclipse windowbuilder

2)数据库:MYSQL5.6

2 代码

1)数据库设计:

REMENT=5 DEFAULT CHARSET=utf8;

2)代码

1)数据库连接类

/*
Navicat MySQL Data Transfer
Source Server         : localhost
Source Server Version : 50614
Source Host           : localhost:3306
Source Database       : test
Target Server Type    : MYSQL
Target Server Version : 50614
File Encoding         : 65001
Date: 2014-12-09 15:53:57
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for dept
-- ----------------------------

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`deptid` int(11) NOT NULL AUTO_INCREMENT,
`deptname` varchar(20) DEFAULT NULL,
PRIMARY KEY (`deptid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------

-- Table structure for user

-- ----------------------------

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`deptid` int(11) DEFAULT NULL,
`birth` varchar(20) DEFAULT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INC           

复制

package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**

 * @author zhanglj

 *数据库连接工具辅助类

 */

public class DBCon {
  public static final String DRIVER="com.mysql.jdbc.Driver";
  public static final String URL="jdbc:mysql://localhost:3306/test";
  public static final String USER="root";
  public static final String PWD="root";
  private Connection con;
  private PreparedStatement ps;
  private ResultSet rs;
  
  
  public DBCon(){
    try {
      //加载驱动程序

      Class.forName(DRIVER);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }
  /**

   * @return返回数据库连接

   */

  public Connection getCon(){
    try {
      con=DriverManager.getConnection(URL, USER, PWD);
    } catch (SQLException e) {
      // TODO Auto-generated catch block

      e.printStackTrace();
    }
    return con;
  }
  
  /**
   * 关闭资源 
   */

  public void closeAll(){
    if(rs!=null){
      try {
        rs.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
    if(ps!=null)
      try {
        ps.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    if(con!=null)
      try {
        con.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
  }
  
  /**

   * @param sql��sql语句 

   * @param pras��������参数列表 

   * @return受影响的条数

   */

  public int update(String sql,Object... pras){
    int resu=0;
    con=getCon();
    try {
      ps=con.prepareStatement(sql);
      if(pras!=null){
        for(int i=0;i<pras.length;i++){
          ps.setObject(i+1, pras[i]);
        }
      }
      resu=ps.executeUpdate();
    } catch (SQLException e) {
      // TODO Auto-generated catch block

      e.printStackTrace();
    }finally{
      closeAll();
    }
    return resu;
  }
  
 
  /**

   * @param sql sql语句 
   * @param pras

   * @return 结果集

   */

  public ResultSet query(String sql,Object... pras){
    con=getCon();
    try {
      ps=con.prepareStatement(sql);
      if(pras!=null){
        for(int i=0;i<pras.length;i++){
          ps.setObject(i+1, pras[i]);
        }
      }
      rs=ps.executeQuery();
    } catch (SQLException e) {
      // TODO Auto-generated catch block

      e.printStackTrace();
    }
    return rs;
  }
}           

复制

2)实体模型           

复制

部门表实体模型
package entity;
import java.io.Serializable;
public class Dept implements Serializable {
  private int deptid;
  private String deptname;
  public int getDeptid() {
    return deptid;
  }
  public void setDeptid(int deptid) {
    this.deptid = deptid;
  }
  public String getDeptname() {
    return deptname;
  }
  public void setDeptname(String deptname) {
    this.deptname = deptname;
  }
  public Dept(int deptid, String deptname) {
    super();
    this.deptid = deptid;
    this.deptname = deptname;
  }
  public Dept() {
    super();
    // TODO Auto-generated constructor stub

  }
  @Override

  public String toString() {
    return this.deptname;
  }
  @Override

  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + deptid;
    result = prime * result
        + ((deptname == null) ? 0 : deptname.hashCode());
    return result;
  }
  public Dept(int deptid){
    this.deptid=deptid;
  }
  @Override

  public boolean equals(Object obj) {
    Dept dept=(Dept) obj;
    return dept.getDeptid()==this.getDeptid();
  }
  
  
}

           

复制

3)数据访问接口

用户表数据访问接口:

package dao;
import java.util.List;
import entity.User;
/**

 * @author zhanglj

 *数据访问接口

 */

public interface IUserDao {
  /**

   * 添加

   * @param user

   * @return

   */

  boolean add(User user);
  /**

   * 修改

   * @param user

   * @return

   */

  boolean update(User user);
  /**

   * 删除

   * @param userid

   * @return

   */

  boolean delete(int userid);
  
  /**

   * 通过Id查找 一条记录

   * @param userid

   * @return

   */

  User QueryById(int userid);
  
  /**

   * 查找全部记录

   * @return

   */

  List<User> queryAll();
}           

复制

部门表数据访问接口:

package dao;
import java.util.List;
import entity.Dept;
/**

 * @author zhanglj

 * 部门表数据访问接口

 *

 */

public interface IDeptDao {
  /**

   * 查找全部部门

   * @return

   */

  List<Dept> queryAll();
}           

复制

4)数据访问接口的实现

用户表数据访问的实现 :

package dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import dao.IUserDao;
import util.DBCon;
import entity.User;
public class UserDaoImpl implements IUserDao {
  DBCon util = new DBCon();
  @Override

  public boolean add(User user) {
    return util.update("insert into user(name,deptid,birth) values(?,?,?)",
        user.getName(), user.getDeptid(), user.getBirth()) > 0;
  }
  @Override

  public boolean update(User user) {
    return util.update(
        "update user set name=?,deptid=?,birth=? where userid=?",
        user.getName(), user.getDeptid(), user.getBirth(),
        user.getUserid()) > 0;
  }
  @Override

  public boolean delete(int userid) {
    
    return util.update("delete from user where userid=?", userid)>0;
  }
  @Override

  public User QueryById(int userid) {
    return _user(util.query("select * from user where userid=?", userid));
  }
  @Override

  public List<User> queryAll() {
    return  _list(util.query("select * from user"));
  }
  
  private User _user(ResultSet rs){
    User user=null;
    try {
      if(rs.next()){
        user=new User();
        user.setBirth(rs.getString("birth"));
        user.setDeptid(rs.getInt("deptid"));
        user.setName(rs.getString("name"));
        user.setUserid(rs.getInt("userid"));
      }
    } catch (SQLException e) {
      // TODO Auto-generated catch block

      e.printStackTrace();
    }finally{
      util.closeAll();
    }
    return user;
  }
  
  private List<User> _list(ResultSet rs){
    List<User> _list=new ArrayList<User>();
    try {
      while(rs.next()){
        User user=new User();
        user.setBirth(rs.getString("birth"));
        user.setDeptid(rs.getInt("deptid"));
        user.setName(rs.getString("name"));
        user.setUserid(rs.getInt("userid"));
        _list.add(user);
      }
    } catch (SQLException e) {
      // TODO Auto-generated catch block

      e.printStackTrace();
    }finally{
      util.closeAll();
    }
    return _list;
  }
}
           

复制

部门表数据访问的实现 :

package dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import util.DBCon;
import dao.IDeptDao;
import entity.Dept;
public class DeptDaoImpl implements IDeptDao{
  DBCon util=new DBCon();
  @Override

  public List<Dept> queryAll() {
    // TODO Auto-generated method stub

    return _list(util.query("select * from dept"));
  }
  private List<Dept> _list(ResultSet rs){
    List<Dept> _list=new ArrayList<Dept>();
    try {
      while(rs.next()){
        Dept dept=new Dept();
        dept.setDeptid(rs.getInt("deptid"));
        dept.setDeptname(rs.getString("deptname"));
        _list.add(dept);
      }
    } catch (SQLException e) {
      // TODO Auto-generated catch block

      e.printStackTrace();
    }finally{
      util.closeAll();
    }
    return _list;
  }
}
           

复制

5)swing的实现

主窗口:

package ui;
import java.awt.BorderLayout;
public class MainFrame extends JFrame implements ActionListener {
  JPanel contentPane;
  JPanel panelBottom;
  private JButton btnDel;
  private JButton btnAdd;
  private AddPanel add;
  private QueryPanel query;
  /**

   * Launch the application.

   */

  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {
          MainFrame frame = new MainFrame();
          frame.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }
  /**

   * Create the frame.

   */

  public MainFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 546, 383);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);
    
    JPanel panel = new JPanel();
    contentPane.add(panel, BorderLayout.NORTH);
    panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    
    JButton btnLoadData = new JButton("获取数据");
    btnLoadData.setActionCommand("loaddata");
    panel.add(btnLoadData);
    
    btnDel = new JButton("删除所选");
    panel.add(btnDel);
    btnDel.setActionCommand("del");
    
    btnAdd = new JButton("添加用户");
    panel.add(btnAdd);
    btnAdd.setActionCommand("add");
    
    panelBottom = new JPanel();
    panelBottom.setBackground(Color.LIGHT_GRAY);
    contentPane.add(panelBottom, BorderLayout.CENTER);
    panelBottom.setLayout(new BorderLayout(0,0));
    
    btnDel.addActionListener(this);
    btnLoadData.addActionListener(this);
    btnAdd.addActionListener(this);
    
  }
  @Override

  public void actionPerformed(ActionEvent e) {
    String command=e.getActionCommand();
    System.out.println(command);
    if(command.equals("add")){
      panelBottom.removeAll();
      add=new AddPanel();
      panelBottom.add(add,BorderLayout.CENTER);
      panelBottom.updateUI();
    }else if(command.equals("loaddata")){
      panelBottom.removeAll();
      query=new QueryPanel();
      panelBottom.add(query,BorderLayout.CENTER);
      panelBottom.updateUI();
    }else if(command.equals("del")){
      if(query==null){
        JOptionPane.showMessageDialog(null, "没有数据");
        return;
      }
      query.del();
    }
    
  }
}           

复制

添加面板

package ui;
import java.awt.BorderLayout;
public class AddPanel extends JPanel {
  private JTextField txtName;
  private JTextField txtBirth;
  private JComboBox cmbDept;
  private IUserDao userDao;
  private IDeptDao deptDao;
  private QueryPanel query;
  private MainFrame main;
  /**

   * Create the panel.

   */

  public AddPanel() {
    setLayout(null);
    
    JLabel label = new JLabel("用户名:");
    label.setBounds(86, 68, 54, 15);
    add(label);
    
    txtName = new JTextField();
    txtName.setBounds(150, 65, 146, 18);
    add(txtName);
    txtName.setColumns(10);
    
    JLabel label_1 = new JLabel("部门:");
    label_1.setBounds(86, 114, 54, 15);
    add(label_1);
    
    userDao=new UserDaoImpl();
    deptDao=new DeptDaoImpl();
    List<Dept> list=deptDao.queryAll();
    
    
    cmbDept = new JComboBox(list.toArray());
    cmbDept.setBounds(150, 110, 146, 23);
    add(cmbDept);
    
    JLabel label_2 = new JLabel("生日:");
    label_2.setBounds(86, 163, 54, 15);
    add(label_2);
    
    txtBirth = new JTextField();
    txtBirth.setBounds(150, 160, 146, 23);
    add(txtBirth);
    txtBirth.setColumns(10);
    
    JButton btnNewButton = new JButton("添加用户");
    btnNewButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        String name=txtName.getText();
        String birth=txtBirth.getText();
        Dept dept=(Dept) cmbDept.getSelectedItem();
        User user=new User();
        user.setBirth(birth);
        user.setName(name);
        user.setDeptid(dept.getDeptid());
        if(userDao.add(user)){
          JOptionPane.showMessageDialog(null, "插入成功");
          txtName.setText("");
          txtBirth.setText("");
        
        }else{
          JOptionPane.showMessageDialog(null, "插入失败");
        }
        
      }
    });
    btnNewButton.setBounds(150, 217, 116, 23);
    add(btnNewButton);
  }
}           

复制

查询,修改,删除面板

package ui;
import java.awt.BorderLayout;
public class QueryPanel extends JPanel {
  private JTable table;
  private DefaultTableModel model;// 用于存储表格数据

  private IDeptDao deptDao;
  private IUserDao userDao;
  private String oldValue = "";// 保存单元格编辑 前的值

  /**

   * Create the panel.

   */

  public QueryPanel() {
    setLayout(new BorderLayout(0, 0));
    JScrollPane scrollPane = new JScrollPane();
    add(scrollPane, BorderLayout.CENTER);
    table = new JTable();
    scrollPane.setColumnHeaderView(table);
    // 初始化存储表格数据的对象

    model = new DefaultTableModel(new Object[][] {}, new String[] { "用户编号",
        "用户名", "所属部门", "出生日期" });
    // 将数据绑定到对象中

    table.setModel(model);
    table.setRowHeight(30);
    scrollPane.setViewportView(table);
    deptDao = new DeptDaoImpl();
    userDao = new UserDaoImpl();
    loadData();
    // 为表格绑定修改值后的事件

    model.addTableModelListener(new TableModelListener() {
      @Override

      public void tableChanged(TableModelEvent e) {
        if (e.getColumn() < 0)
          return;
        String nVal = table.getValueAt(e.getLastRow(), e.getColumn())
            .toString();
        // 如果旧的值 和新的值一样,直接 返回

        if (nVal.equals(oldValue)) {
          return;
        }
        // 判断当前编辑的单元格是否是主键列

        if (e.getColumn() == 0) {
          // 还原旧的值

          table.setValueAt(oldValue, e.getLastRow(), e.getColumn());
          return;
        }
        // 更新数据

        User user = new User();
        user.setUserid(Integer.valueOf(table.getValueAt(e.getLastRow(),
            0).toString()));
        user.setName(table.getValueAt(e.getLastRow(), 1).toString());
        user.setBirth(table.getValueAt(e.getLastRow(), 3).toString());
        Dept dept = (Dept) table.getValueAt(e.getLastRow(), 2);
        user.setDeptid(dept.getDeptid());
        userDao.update(user);
        loadData();
      }
    });
  }
  public void loadData() {
    // 清除旧的数据

    model.getDataVector().clear();
    // 查询部门数据

    List<Dept> deptList = deptDao.queryAll();
    JComboBox cob = new JComboBox(deptList.toArray());
    // 创建一个使用下拉框代替编辑框的单元格对象

    DefaultCellEditor dept = new DefaultCellEditor(cob);
    // 获取表格的列model对象

    TableColumnModel col = table.getColumnModel();
    // 获取部门的列,设置这个列为下拉框列类型

    col.getColumn(2).setCellEditor(dept);
    // 查询所有的用户信息

    List<User> list = userDao.queryAll();
    // 遍历每一条数据,添加到model中

    int i = 0;
    for (User user : list) {
      // 添加 行数据

      cob.setSelectedItem(new Dept(user.getDeptid()));
      model.addRow(new Object[] { user.getUserid(), user.getName(),
          cob.getSelectedItem(), user.getBirth() });
    }
  }
  public void del() {
    if (table.getSelectedRowCount() <= 0) {
      JOptionPane.showMessageDialog(null, "请选择要删除的数据行");
      return;
    }
    int result = JOptionPane.showConfirmDialog(null, "是否确定要删除");
    // 判断用户是否点击

    if (result == JOptionPane.OK_OPTION) {
      int userid = Integer.valueOf(table.getValueAt(
          table.getSelectedRow(), 0).toString());
      userDao.delete(userid);
      loadData();
    }
  }
}


           

复制

效果:

java swing 实现数据库的增删查改1 工具 2 代码
java swing 实现数据库的增删查改1 工具 2 代码
java swing 实现数据库的增删查改1 工具 2 代码
java swing 实现数据库的增删查改1 工具 2 代码