文档章节

java swing 实现数据库的增删查改

zlj51249
 zlj51249
发布于 2016/07/06 08:05
字数 1945
阅读 55
收藏 1

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

       不废话了,上代码。

1 工具

     1)IDE 工具:eclipse   windowbuilder

     2)数据库:MYSQL5.6

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_INCREMENT=5 DEFAULT CHARSET=utf8;

2)代码

       1)数据库连接类

     

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;

/**
 * @author zhanglj
 * 用户实体
 *
 */
public class User implements Serializable {
	private int userid;
	private String name;
	private int deptid;
	private String birth;
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getDeptid() {
		return deptid;
	}
	public void setDeptid(int deptid) {
		this.deptid = deptid;
	}
	public String getBirth() {
		return birth;
	}
	public void setBirth(String birth) {
		this.birth = birth;
	}
	
	
}

部门表实体模型

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();
		}
	}

}

效果:



这样就完成了,附上源代码 


本文转载自:http://blog.csdn.net/zhanglj166/article/details/41824665

zlj51249
粉丝 1
博文 31
码字总数 0
作品 0
泉州
程序员
私信 提问
工作几年只会增删改查怎么了,大神们都是从第一行代码开始的!

昨晚12点,Mike收到了一位童鞋私信,大家聊到了许久。 经过交流,了解到他大学学的是计算机系,毕业之后进入外包公司,目前已工作两年了,工作内容主要是增删改查,每天有做不完的项目,经常...

mikechen优知
09/11
244
0
工作几年只会增删改查怎么了,大神们都是从第一行代码开始的

昨晚12点,Mike收到了一位童鞋私信,大家聊到了许久。 经过交流,了解到他大学学的是计算机系,毕业之后进入外包公司,目前已工作两年了,工作内容主要是增删改查,每天有做不完的项目,经常...

mikechen优知
09/11
0
0
Mybatis入门基本实例--实现增删改查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_38321889/article/details/80727600 基于上一篇文章的Mybatis配置信息,我们可以实现一些基本的数据库功...

善水输出端
2018/06/18
0
0
基于 Java 的 CMS 解决方案 - tjpcms

官网:http://www.tjpcms.com tjpcms 是一套基于 Java 的 CMS 解决方案,开源免费。其独有的实时配置增删改查的功能,是其区别于同类 cms 的最大特点,也是最大优势,极大减少了重复劳动。懂...

金盆洗手
2017/01/12
11.2K
6
微服务 SpringBoot 2.0(七):使用JdbcTemplates访问Mysql

一切没有与数据库交互的网站都是假网站 —— Java面试必修 引言 在web开发服务中,开发人员要做的事情就是将数据库中的数据返回至前端页面,在第五章我们已经整合了页面,今天我们再结合数据...

阿郎_
2018/09/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
15分钟前
4
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
47分钟前
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
48分钟前
8
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
52分钟前
8
0
深入了解Redis底层数据结构

说明 说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是...

TurboSanil
53分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部