利用java实现对mysql数据库的增删改查

项目需求:

实现四个部分的功能:

交互界面可以参考如下图:

环境配置:
1.win7系统
2.myeclipse+jdk 1.6
3.sqlserver2005


第一部分:操作界面和删除记录功能的实现
package stuinfo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;

public class JTable_Test3 extends JFrame implements ActionListener{
	//定义组件
	JPanel jp1,jp2;
	JLabel jl1;
	JButton jb1,jb2,jb3,jb4;
	JTable jt;
	JScrollPane jsp;
	JTextField jtf;
	StuModel sm;
	
	public static void main(String[] args) {
		try {
			// 将当前窗体外观设置为所在操作系统的外观
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
		new JTable_Test3();
	}
	
	//构造函数
	public JTable_Test3(){
		jp1=new JPanel();
		jtf=new JTextField(10);
		jb1=new JButton("查询");
		jb1.addActionListener(this);
		jl1=new JLabel("请输入名字");
		
		//把各个空间加入列
		jp1.add(jl1);
		jp1.add(jtf);
		jp1.add(jb1);
		
		jp2=new JPanel();
		jb2=new JButton("添加");
		jb2.addActionListener(this);
		jb3=new JButton("修改");
		jb3.addActionListener(this);
		jb4=new JButton("删除");
		jb4.addActionListener(this);
		//把各个按钮加入到jp2中
		jp2.add(jb2);
		jp2.add(jb3);
		jp2.add(jb4);
		
		//创建一个数据模型对象
		sm=new StuModel();
		String []paras={"1"};
		sm.queryStu("select * from stu where 1=?", paras);
		
		//初始化JTable
		jt=new JTable(sm);
		
		//初始化jsp JScrollPane
		jsp=new JScrollPane(jt);
		
		//把jsp放入到jframe
		this.add(jsp);
		this.add(jp1,"North");
		this.add(jp2,"South");
		
		this.setSize(400, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==jb1){
			//因为把对表的数据封装到StuModel中,我们就可以比较简单的完成查询
			String name=this.jtf.getText();
			//写一个SQL语句
			String sql="select * from stu where sname=?";
			String []paras={name};
			//构建新的数据模型类,并更新
			sm=new StuModel();
			sm.queryStu(sql, paras);
			//更新JTable
			jt.setModel(sm);
		}
		//用户点击添加时
		else if(e.getSource()==jb2){
			StuAddDialog sa=new StuAddDialog(this, "添加学生", true);
			//重新再获得新的数据模型
			//构建新的数据模型类,并更新
			sm=new StuModel();
			String []paras2={"1"};
			sm.queryStu("select * from stu where 1=?", paras2);
			//更新JTable
			jt.setModel(sm);
		}
		//用户修改数据
		else if(e.getSource()==jb3){
			int rowNum=this.jt.getSelectedRow();
			if(rowNum==-1){
				//提示
				JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);
				return;
			}
			
			//显示修改对话框
			new StuUpdDialog(this,"修改学生信息",true,sm,rowNum); 
			
			//更新数据模型
			sm=new StuModel();
			String []paras2={"1"};
			sm.queryStu("select * from stu where 1=?", paras2);
			//更新JTable
			jt.setModel(sm);
		}
		
		//用户点击删除时,删除一条选中的数据
		else if(e.getSource()==jb4){
			//1、得到学生的ID号
			//getSelectedRow会返回用户点中的行
			//如果该用户一行都没有选择,就会返回-1
			int rowNum=this.jt.getSelectedRow();
			if(rowNum==-1){
				//提示
				JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);
				return;
			}
			//得到学生编号
			int stuId=(Integer) sm.getValueAt(rowNum, 0);
			//创建一个sql语句
			String sql="delete from stu where sno=?";
			String []paras={stuId+""};
			StuModel temp=new StuModel();
			if(temp.updStu(sql, paras)){
				JOptionPane.showMessageDialog(this,"删除数据成功","删除数据提示",JOptionPane.INFORMATION_MESSAGE);
			}else{
				JOptionPane.showMessageDialog(this,"删除数据失败","删除数据提示",JOptionPane.ERROR_MESSAGE);
			}
			
			//更新数据模型
			sm=new StuModel();
			String []paras2={"1"};
			sm.queryStu("select * from stu where 1=?", paras2);
			//更新JTable
			jt.setModel(sm);
		}
	}
}

第二部分:建立访问数据库模型
package stuinfo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

public class StuModel extends AbstractTableModel{
	//rowData用来存放行数据、columnNames存放列名
	Vector rowData,columnNames;
	
	//添加学生(增、删、改)
	public boolean updStu(String sql,String []paras){
		//创建SqlHelper(如果程序并发性不考虑,可以把SqlHelper做成static)
		SqlHelper sqlHelper=new SqlHelper();
		return sqlHelper.updExecute(sql, paras);
	}
	
	//查询的本质就是用来初始化
	public void queryStu(String sql,String []paras){
		SqlHelper sqlHelper=null;
		//中间
		columnNames=new Vector();
		//设置列名
		columnNames.add("学号");
		columnNames.add("名字");
		columnNames.add("性别");
		columnNames.add("年龄");
		columnNames.add("籍贯");
		columnNames.add("系别");
		
		rowData=new Vector();
		//rowData可以存放多行
		try {
			sqlHelper=new SqlHelper();
			ResultSet rs=sqlHelper.queryExectue(sql, paras);
			
			while(rs.next()){
				Vector hang=new Vector();
				hang.add(rs.getInt(1));
				hang.add(rs.getString(2));
				hang.add(rs.getString(3));
				hang.add(rs.getString(4));
				hang.add(rs.getString(5));
				hang.add(rs.getString(6));
				//加入rowData
				rowData.add(hang);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			sqlHelper.close();
		}
	}
	
	//得到共有多少列
	public int getColumnCount() {
		return this.columnNames.size();
	}
	
	@Override
	public String getColumnName(int column) {
		return (String)this.columnNames.get(column);
	}

	//得到共有多少行
	public int getRowCount() {
		return this.rowData.size();
	}

	//得到某行某列的数据
	public Object getValueAt(int rowIndex, int columnIndex) {
		return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);
	}
}

第三部分:实现与数据库服务器的连接访问
package stuinfo;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class SqlHelper {
	public static void main(
			String[] args) {
		new SqlHelper();
	}
	//定义操作数据库需要的组件
	PreparedStatement ps=null;
	Connection ct=null;
	ResultSet rs=null;	
	String sqlDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=stuinfo;user=sa;password=631129;";
	
	public SqlHelper(){
		try {
			//1、加载驱动
			Class.forName(sqlDriver);
			//2、得到连接
			ct=DriverManager.getConnection(url);
//			DatabaseMetaData dbmd=ct.getMetaData();
//			System.out
//					.println("数据库版本"+dbmd.getDatabaseProductName());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//关闭数据库资源
	public void close(){
		try {
			if(rs!=null){
				rs.close();
			}
			if(ps!=null){
				ps.close();
			}
			if(ct!=null){
				ct.close();
			}
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
	}
	
	//写一个不需要注入的方法(由于数据量少,所以写了一个这个方法。一般都带有条件的注入)
	public ResultSet queryExectue(String sql){
		try {
			//3、创建ps
			ps=ct.prepareStatement(sql);
			rs=ps.executeQuery();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//关闭资源???
		}
		return rs;
	}
	
	//对数据库的查询操作
	public ResultSet queryExectue(String sql,String []paras){
		try {
			//3、创建ps
			ps=ct.prepareStatement(sql);
			//给ps的问号赋值
			for(int i=0;i<paras.length;i++){
				ps.setString(i+1, paras[i]);
			}
			rs=ps.executeQuery();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//关闭资源???
		}
		return rs;
	}
	
	//把对数据库的增、删、改合在一起
	public boolean updExecute(String sql,String []paras){
		boolean b=true;
		try {
			//3、创建ps
			ps=ct.prepareStatement(sql);
			//给ps的问号赋值
			for(int i=0;i<paras.length;i++){
				ps.setString(i+1, paras[i]);
			}
			
			//4、执行操作
			if(ps.executeUpdate()!=1){
				b=false;
			}
		} catch (Exception e) {
			b=false;
			JOptionPane.showMessageDialog(null, "数据源错误或数据库用户名、密码错误", "数据库连接错误提示", JOptionPane.ERROR_MESSAGE);
			e.printStackTrace();
		}finally{
			this.close();
		}
		return b;
	}
}

第四部分:增加数据功能实现
package stuinfo;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StuAddDialog extends JDialog implements ActionListener{
	//定义我需要的swing组件
	JLabel jl1,jl2,jl3,jl4,jl5,jl6;
	JButton jb1,jb2;
	JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
	JPanel jp1,jp2,jp3;
	
	//owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态
	public StuAddDialog(Frame owner,String title,boolean modal){
		super(owner,title,modal);//调用父类构造方法,达到模式对话框效果
		jl1=new JLabel("学号");
		jl2=new JLabel("名字");
		jl3=new JLabel("性别");
		jl4=new JLabel("年龄");
		jl5=new JLabel("籍贯");
		jl6=new JLabel("系别");
		
		jtf1=new JTextField();
		jtf2=new JTextField();
		jtf3=new JTextField();
		jtf4=new JTextField();
		jtf5=new JTextField();
		jtf6=new JTextField();
		
		jb1=new JButton("添加");
		jb2=new JButton("取消");
		
		jp1=new JPanel();
		jp2=new JPanel();
		jp3=new JPanel();
		
		//设置布局
		jp1.setLayout(new GridLayout(6,1));
		jp2.setLayout(new GridLayout(6,1));
		
		//添加组件
		jp1.add(jl1);
		jp1.add(jl2);
		jp1.add(jl3);
		jp1.add(jl4);
		jp1.add(jl5);
		jp1.add(jl6);
		
		jp2.add(jtf1);
		jp2.add(jtf2);
		jp2.add(jtf3);
		jp2.add(jtf4);
		jp2.add(jtf5);
		jp2.add(jtf6);
		
		jp3.add(jb1);
		jp3.add(jb2);
		
		this.add(jp1,BorderLayout.WEST);
		this.add(jp2,BorderLayout.CENTER);
		this.add(jp3,BorderLayout.SOUTH);
		
		jb1.addActionListener(this);
		jb2.addActionListener(this);
		
		//展现
		this.setSize(300, 250);
		this.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		//用户点击添加按钮后的响应动作
		if(e.getSource()==jb1){
			//连接数据库
			Connection ct=null;
			Statement stmt=null;
			ResultSet rs=null;
			PreparedStatement ps=null;
			//连接数据库
			try {
				//1、加载驱动
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
				//2、得到连接
				ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stuinfo;user=sa;password=631129;");
				String strsql="insert into stu values(?,?,?,?,?,?)";
				ps=ct.prepareStatement(strsql);
				ps.setInt(1, Integer.parseInt(jtf1.getText()));
				ps.setString(2,jtf2.getText());
				ps.setString(3,jtf3.getText());
				ps.setInt(4,Integer.valueOf(jtf4.getText()));
				ps.setString(5,jtf5.getText());
				ps.setString(6,jtf6.getText());
				ps.executeUpdate();
				this.dispose();
			} catch (Exception e2) {
				e2.printStackTrace();
			}finally{
				try {
					if(ps!=null){
						ps.close();
					}
					if(ct!=null){
						ct.close();
					}
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
		}
		else if(e.getSource()==jb2){
			this.dispose();
		}
	}
}

第五部分:修改数据库功能实现
package stuinfo;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StuUpdDialog extends JDialog implements ActionListener{
	//定义我需要的swing组件
	JLabel jl1,jl2,jl3,jl4,jl5,jl6;
	JButton jb1,jb2;
	JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
	JPanel jp1,jp2,jp3;
	
	//owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态
	public StuUpdDialog(Frame owner,String title,boolean modal,StuModel sm,int rowNum){
		super(owner,title,modal);//调用父类构造方法,达到模式对话框效果
		jl1=new JLabel("学号");
		jl2=new JLabel("名字");
		jl3=new JLabel("性别");
		jl4=new JLabel("年龄");
		jl5=new JLabel("籍贯");
		jl6=new JLabel("系别");
		
		jtf1=new JTextField();
		//初始化数据
		jtf1.setText(sm.getValueAt(rowNum, 0)+"");
		//让jtf1不能修改
		jtf1.setEditable(false);
		jtf2=new JTextField();
		jtf2.setText(sm.getValueAt(rowNum, 1)+"");
		jtf3=new JTextField();
		jtf3.setText(sm.getValueAt(rowNum, 2)+"");
		jtf4=new JTextField();
		jtf4.setText(sm.getValueAt(rowNum, 3)+"");
		jtf5=new JTextField();
		jtf5.setText(sm.getValueAt(rowNum, 4)+"");
		jtf6=new JTextField();
		jtf6.setText(sm.getValueAt(rowNum, 5)+"");
		
		jb1=new JButton("修改");
		jb2=new JButton("取消");
		
		jp1=new JPanel();
		jp2=new JPanel();
		jp3=new JPanel();
		
		//设置布局
		jp1.setLayout(new GridLayout(6,1));
		jp2.setLayout(new GridLayout(6,1));
		
		//添加组件
		jp1.add(jl1);
		jp1.add(jl2);
		jp1.add(jl3);
		jp1.add(jl4);
		jp1.add(jl5);
		jp1.add(jl6);
		
		jp2.add(jtf1);
		jp2.add(jtf2);
		jp2.add(jtf3);
		jp2.add(jtf4);
		jp2.add(jtf5);
		jp2.add(jtf6);
		
		jp3.add(jb1);
		jp3.add(jb2);
		
		this.add(jp1,BorderLayout.WEST);
		this.add(jp2,BorderLayout.CENTER);
		this.add(jp3,BorderLayout.SOUTH);
		
		jb1.addActionListener(this);
		jb2.addActionListener(this);
		
		//展现
		this.setSize(300, 250);
		this.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		//用户点击添加按钮后的响应动作
		if(e.getSource()==jb1){
			//做一个sql语句
			String sql="update stu set sname=?,sex=?,sage=?,jiguan=?,sdept=? where sno=?";
			String []paras={jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText(),jtf1.getText()};
			StuModel temp=new StuModel();
			if(temp.updStu(sql, paras)){
				JOptionPane.showMessageDialog(this,"修改数据成功","修改数据提示",JOptionPane.INFORMATION_MESSAGE);
			}else{
				JOptionPane.showMessageDialog(this,"修改数据失败","修改数据提示",JOptionPane.ERROR_MESSAGE);
			}
			this.dispose();
		}
		else if(e.getSource()==jb2){
			this.dispose();
		}
	}
}

  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值