packagexsgl;importjava.awt.*;importjava.awt.event.*;importjava.sql.*;importjava.util.*;importjavax.swing.*;importjava.util.Vector;importjavax.swing.table.*;importjava.awt.event.*;publicclassXsglxtextendsJFrameimplementsActionListener//继承JFrame并实现接口ActionListener{JPanelmb1,mb2;JLabelbq1;JTextFieldwbk1;JButtonan1,an2,an3,an4;JTablebg1;//定义表格对象JScrollPanegd1;Xsxxxsxx2;//定义Xsxx类的一个对象xsxx2publicstaticvoidmain(String[]args){Xsglxtxs=newXsglxt();}publicXsglxt()//XSGLXT构造方法,用于对象初始化。{mb1=newJPanel();bq1=newJLabel(请输入姓名);wbk1=newJTextField(10);an1=newJButton(查询);an1.addActionListener(this);//对按钮1添加监听an1.setActionCommand(chaxun);//设置按钮1的监听信息mb1.add(bq1);mb1.add(wbk1);mb1.add(an1);mb2=newJPanel();an2=newJButton(添加);an2.addActionListener(this);an2.setActionCommand(tianjia);an3=newJButton(修改);an3.addActionListener(this);an3.setActionCommand(xiugai);an4=newJButton(删除);an4.addActionListener(this);an4.setActionCommand(shanchu);mb2.add(an2);mb2.add(an3);mb2.add(an4);xsxx2=newXsxx();bg1=newJTable(xsxx2);gd1=newJScrollPane(bg1);this.add(gd1);this.add(mb1,North);this.add(mb2,South);this.setTitle(学生管理系统);this.setSize(500,400);this.setLocation(201,181);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}publicvoidactionPerformed(ActionEvente)//实现接口ActionListener中的actionPerformed抽象方法{if(e.getActionCommand().equals(chaxun))//判断监听到的组件信息是不是chaxun(是不是查询按钮){Stringxingming=this.wbk1.getText().trim();//将本窗口的文本框1中文本取出,忽略前后空格后赋给变量xingmingStringsql=select*fromxueshengwherexingming='+xingming+';//将SQL语句赋给String类型变量sqlxsxx2=newXsxx(sql);//将String类型变量sql作为参数NEW一个Xsxx类的对象xsxx2bg1.setModel(xsxx2);//将表bg1的数据模型设为newModel,并向其注册以获取来自新数据模型的侦听器通知。}elseif(e.getActionCommand().equals(tianjia)){Tianjiatj=newTianjia(this,添加学生信息,true);xsxx2=newXsxx();//无参数传递的NEW一个Xsxx类的对象xsxx2bg1.setModel(xsxx2);}elseif(e.getActionCommand().equals(xiugai)){intii=this.bg1.getSelectedRow();//使用getSelectedRow()方法返回第一个选定行的索引;如果没有选定的行,则返回-1。if(ii==-1){JOptionPane.showMessageDialog(this,请选中要修改的行);//显示一个错误对话框return;}newXiugai(this,修改学生信息,true,xsxx2,ii);//NEW一个修改类对象并附上相关参数,true指定对话框在显示时是否阻塞用户向其他顶层窗口输入xsxx2=newXsxx();bg1.setModel(xsxx2);}elseif(e.getActionCommand().equals(shanchu)){intii=this.bg1.getSelectedRow();if(ii==-1){JOptionPane.showMessageDialog(this,请选中要删除的行);return;}Stringst=(String)xsxx2.getValueAt(ii,0);//使用getValueAt(ii,0)方法返回第ii行的第0字段数据并强转为字符串型数据PreparedStatementps=null;//定义一个PreparedStatement对象ps;SQL语句被预编译并存储在PreparedStatement对象中Connectionct=null;//定义一个Connection对象ct;用来与特定数据库的连接。ResultSetrs=null;//定义一个ResultSet对象rs;表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。Statementsm=null;try{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//返回与带有给定字符串名的类或接口相关联的Class对象。ct=DriverManager.getConnection(jdbc:odbc:123,sa,123456);//DriverManager:管理一组JDBC驱动程序的基本服务。getConnection方法试图建立到给定数据库URL的连接。ps=ct.prepareStatement(deletefromxueshengwherexuehao=?);//prepareStatement()方法是创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库。ps.setString(1,st);//设置prepareStatement中SQL语句中第一个?位置为st中的字符串ps.executeUpdate();//在此PreparedStatement对象中执行SQL语句。}catch(Exceptione2){}finally{try{if(rs!=null){rs.close();}if(ps!=null){ps.close();}if(ct!=null){ct.close();}}catch(Exceptione3){}}xsxx2=newXsxx();bg1.setModel(xsxx2);}}}classXsxxextendsAbstractTableModel{Vectorziduan,jilu;PreparedStatementps=null;Connectionct=null;ResultSetrs=null;publicintgetRowCount()//AbstractTableModel抽象类中的一个抽象方法(子类中必须实现),返回该模型中的行数。JTable使用此方法来确定它应该显示多少行。{returnthis.jilu.size();}publicintgetColumnCount()//返回该模型中的列数。JTable使用此方法来确定在默认情况下它应该创建并显示多少列。{returnthis.ziduan.size();}publicObjectgetValueAt(inthang,intlie)//返回指定行和列对应位置的单元格值。{return((Vector)this.jilu.get(hang)).get(lie);}publicXsxx(){this.sqlyj(select*fromxuesheng);}publicXsxx(Stringss){this.sqlyj(ss);}publicStringgetColumnName(inte)//返回e位置的列的名称.{return(String)this.ziduan.get(e);}publicvoidsqlyj(Stringsql){ziduan=newVector();ziduan.add(学号);ziduan.add(姓名);ziduan.add(性别);ziduan.add(年龄);ziduan.add(籍贯);ziduan.add(所在院系);jilu=newVector();try{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);ct=DriverManager.getConnection(jdbc:odbc:123,sa,123456);ps=ct.prepareStatement(sql);rs=ps.executeQuery();//executeQuery()方法是在此PreparedStatement对象ps中执行SQL查询,并返回该查询生成的ResultSet对象。while(rs.next()){Vectorhang=newVector();hang.add(rs.getString(1));//以Java编程语言中String的形式获取此ResultSet对象的当前行中指定列的值。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));jilu.add(hang);}}catch(Exceptione){}finally{try{if(rs!=null){rs.close();}if(ps!=null){ps.close();}if(ct!=null){ct.close();}}catch(Exceptione){}}}}classXiugaiextendsJDialogimplementsActionListener//JDialog是创建对话框窗口的主要类{JLabelbq1,bq2,bq3,bq4,bq5,bq6;JTextFieldwbk1,wbk2,wbk3,wbk4,wbk5,wbk6;JButtonan1,an2;JPanelmb1,mb2,mb3,mb4;publicXiugai(Framefck,Stringckm,Booleanmsck,Xsxxxsxx2,inthang){super(fck,ckm,msck);bq1=newJLabel(学号);bq2=newJLabel(姓名);bq3=newJLabel(性别);bq4=newJLabel(年龄);bq5=newJLabel(籍贯);bq6=newJLabel(院系);wbk1=newJTextField(5);wbk1.setText((String)xsxx2.getValueAt(hang,0));wbk1.s