

















































Mini学生管理系统

[JTable_Test3.java]源码
/** * 完成一个mini版本的学生管理系统(MODEL1模式) * 1、查询任务 * 2、添加功能* 3、使用的是sql server2012,数据库驱动与连接与视频教程中的sql server2000连接* 有所不同 */package com.student1; 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; //定义操作数据库需要的组件 PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; 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(); //初始化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 stuName=‘"+name+"‘"; //构建新的数据模型类,并更新 sm=new StuModel(sql); //更新JTable jt.setModel(sm); } //用户点击添加时 else if(e.getSource()==jb2){ StuAddDialog sa=new StuAddDialog(this, "添加学生", true); //重新再获得新的数据模型 //构建新的数据模型类,并更新 sm=new StuModel(); //更新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(); //更新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; } //得到学生编号 String stuId=(String)sm.getValueAt(rowNum, 0); //连接数据库,完成删除任务 try { //1、加载驱动 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //2、得到连接 ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;"); ps=ct.prepareStatement("delete from stu where stuid=?"); ps.setString(1, stuId); ps.executeUpdate(); } catch (Exception e2) { e2.printStackTrace(); }finally{ try { if(rs!=null){ rs.close(); } if(ps!=null){ ps.close(); } if(ct!=null){ ct.close(); } } catch (SQLException e1) { e1.printStackTrace(); } } //更新数据模型 sm=new StuModel(); //更新JTable jt.setModel(sm); } }}*******************************************************************************
[StuModel.java]源码
/** * 这是一个stu表的模型 * 可以把对student表的各种操作封装到该模型中 */package com.student1; 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.table.AbstractTableModel; public class StuModel extends AbstractTableModel{ //rowData用来存放行数据、columnNames存放列名 Vector rowData,columnNames; //定义操作数据库需要的组件 PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; public void init(String sql){ if(sql==""||sql.equals(null)){ sql="select * from stu"; } //中间 columnNames=new Vector<>(); //设置列名 columnNames.add("学号"); columnNames.add("名字"); columnNames.add("性别"); columnNames.add("年龄"); columnNames.add("籍贯"); columnNames.add("系别"); rowData=new Vector<>(); //rowData可以存放多行 try { //1、加载驱动 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //2、得到连接 ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;"); ps=ct.prepareStatement(sql); rs=ps.executeQuery(); while(rs.next()){ Vector hang=new Vector(); hang.add(rs.getString(1)); hang.add(rs.getString(2)); hang.add(rs.getString(3)); hang.add(rs.getInt(4)); hang.add(rs.getString(5)); hang.add(rs.getString(6)); //加入rowData rowData.add(hang); } } catch (Exception e) { e.printStackTrace(); }finally{ try { if(rs!=null){ rs.close(); } if(ps!=null){ ps.close(); } if(ct!=null){ ct.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //构造函数,用于初始我们的数据模型 public StuModel(String sql){ this.init(sql); } //构造函数 public StuModel(){ this.init(""); } //得到共有多少列 public int getColumnCount() { return this.columnNames.size(); } 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); }} ********************************************************************
[StuAddDialog.java]源码
/** * 添加数据 */package com.student1; 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=stussystem;user=sa;password=sa;"); String strsql="insert into stu values(?,?,?,?,?,?)"; ps=ct.prepareStatement(strsql); ps.setString(1,jtf1.getText()); ps.setString(2,jtf2.getText()); ps.setString(3,jtf3.getText()); ps.setInt(4,Integer.parseInt(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(); } }} 原文:https://www.cnblogs.com/xuxaut-558/p/10045802.html