1、package xsgl;import java.awt。*;import java.awt.event.;import java。sql。;import java。util。*;import javax.swing.;import java。util。Vector;import javax.swing。table.*;import java。awt.event.;public class Xsglxt extends JFrame implements ActionListener/继承JFrame 并实现接口ActionListenerJPanel mb1,mb2;JLabel bq1;J
2、TextField wbk1;JButton an1,an2,an3,an4; JTable bg1; /定义表格对象JScrollPane gd1;Xsxx xsxx2; /定义Xsxx类的一个对象xsxx2public static void main(String args) Xsglxt xs=new Xsglxt();public Xsglxt() /XSGLXT构造方法,用于对象初始化。mb1=new JPanel();bq1=new JLabel(”请输入姓名”);wbk1=new JTextField(10);an1=new JButton(”查询);an1。addAction
3、Listener(this); /对按钮1添加监听an1.setActionCommand(chaxun”); /设置按钮1的监听信息mb1.add(bq1); mb1。add(wbk1); mb1。add(an1);mb2=new JPanel();an2=new JButton(”添加”);an2。addActionListener(this);an2.setActionCommand(tianjia);an3=new JButton(修改”);an3。addActionListener(this);an3。setActionCommand(xiugai);an4=new JButton(
4、删除”);an4。addActionListener(this);an4.setActionCommand(shanchu”);mb2.add(an2); mb2.add(an3); mb2.add(an4);xsxx2=new Xsxx();bg1=new JTable(xsxx2);gd1=new JScrollPane(bg1);this。add(gd1);this.add(mb1,North”);this。add(mb2,”South);this。setTitle(学生管理系统);this.setSize(500,400);this.setLocation(201,181);this.
5、setResizable(false);this。setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE);this.setVisible(true);public void actionPerformed(ActionEvent e) /实现接口ActionListener中的actionPerformed抽象方法if(e。getActionCommand().equals(chaxun”)) /判断监听到的组件信息是不是chaxun(是不是查询按钮)String xingming=this。wbk1。getText().trim(); /将本窗口的文本框
6、1中文本取出,忽略前后空格后赋给变量xingmingString sql=”select * from xuesheng where xingming=+xingming+”; /将SQL语句赋给String类型变量sqlxsxx2=new Xsxx(sql); /将String类型变量sql作为参数NEW一个Xsxx类的对象xsxx2bg1。setModel(xsxx2); /将表bg1的数据模型设为 newModel,并向其注册以获取来自新数据模型的侦听器通知。else if(e.getActionCommand().equals(tianjia”))Tianjia tj=new Tian
7、jia(this,”添加学生信息”,true);xsxx2=new Xsxx(); /无参数传递的NEW一个Xsxx类的对象xsxx2bg1.setModel(xsxx2);else if(e。getActionCommand().equals(xiugai”)int ii=this.bg1。getSelectedRow(); /使用getSelectedRow()方法返回第一个选定行的索引;如果没有选定的行,则返回 -1。 if(ii=-1)JOptionPane.showMessageDialog(this,”请选中要修改的行); /显示一个错误对话框return;new Xiugai(t
8、his,修改学生信息,true,xsxx2,ii); /NEW一个修改类对象并附上相关参数,true指定对话框在显示时是否阻塞用户向其他顶层窗口输入xsxx2=new Xsxx();bg1.setModel(xsxx2);else if(e.getActionCommand().equals(”shanchu”))int ii=this。bg1。getSelectedRow();if(ii=1)JOptionPane.showMessageDialog(this,请选中要删除的行);return; String st=(String)xsxx2.getValueAt(ii,0); /使用get
9、ValueAt(ii,0)方法返回第ii行的第0字段数据并强转为字符串型数据 PreparedStatement ps=null; /定义一个PreparedStatement对象ps;SQL 语句被预编译并存储在 PreparedStatement 对象中 Connection ct=null;/定义一个Connection对象ct;用来与特定数据库的连接。 ResultSet rs=null; /定义一个ResultSet对象rs;表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 Statement sm=null; try Class。forName(”sun.jdbc.od
10、bc。JdbcOdbcDriver”); /返回与带有给定字符串名的类或接口相关联的 Class 对象。 ct=DriverManager.getConnection(jdbc:odbc:123”,”sa,”123456”); /DriverManager:管理一组 JDBC 驱动程序的基本服务.getConnection方法试图建立到给定数据库 URL 的连接。 ps=ct.prepareStatement(”delete from xuesheng where xuehao=?”); /prepareStatement()方法是创建一个 PreparedStatement 对象来将参数化的
11、 SQL 语句发送到数据库。 ps.setString(1,st); /设置prepareStatement中SQL语句中第一个?位置为st中的字符串 ps。executeUpdate(); /在此 PreparedStatement 对象中执行 SQL 语句。 catch (Exception e2) finally try if(rs!=null)rs。close(); if(ps!=null)ps.close();if(ct!=null)ct。close(); catch (Exception e3) xsxx2=new Xsxx(); bg1.setModel(xsxx2);class
12、 Xsxx extends AbstractTableModel Vector ziduan,jilu;PreparedStatement ps=null; Connection ct=null; ResultSet rs=null;public int getRowCount() / AbstractTableModel抽象类中的一个抽象方法(子类中必须实现),返回该模型中的行数.JTable 使用此方法来确定它应该显示多少行。return this.jilu。size(); public int getColumnCount() /返回该模型中的列数.JTable 使用此方法来确定在默认情
13、况下它应该创建并显示多少列。 return this.ziduan.size();public Object getValueAt(int hang, int lie) /返回指定行和列对应位置的单元格值.return ((Vector)this。jilu。get(hang))。get(lie);public Xsxx()this.sqlyj(”select from xuesheng”);public Xsxx(String ss)this.sqlyj(ss);public String getColumnName(int e) /返回 e 位置的列的名称。return (String)th
14、is。ziduan.get(e);public void sqlyj(String sql)ziduan=new Vector();ziduan。add(”学号);ziduan.add(”姓名);ziduan.add(性别”);ziduan。add(年龄);ziduan。add(”籍贯”);ziduan.add(所在院系); jilu=new Vector();try Class。forName(”sun.jdbc。odbc。JdbcOdbcDriver); ct=DriverManager.getConnection(jdbc:odbc:123”,sa,123456); ps=ct。prep
15、areStatement(sql); rs=ps.executeQuery(); /executeQuery()方法是在此 PreparedStatement 对象ps中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。 while(rs.next() Vector hang=new Vector();hang。add(rs。getString(1); /以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值.hang.add(rs。getString(2);hang。add(rs.getString(3);hang。add(rs.g
16、etInt(4));hang。add(rs。getString(5);hang.add(rs.getString(6);jilu.add(hang); catch (Exception e) finally try if(rs!=null)rs。close(); if(ps!=null)ps.close();if(ct!=null)ct.close(); catch (Exception e) class Xiugai extends JDialog implements ActionListener /JDialog是创建对话框窗口的主要类 JLabel bq1,bq2,bq3,bq4,bq
17、5,bq6; JTextField wbk1,wbk2,wbk3,wbk4,wbk5,wbk6; JButton an1,an2; JPanel mb1,mb2,mb3,mb4; public Xiugai(Frame fck,String ckm,Boolean msck,Xsxx xsxx2,int hang) super(fck,ckm,msck); bq1=new JLabel( 学号 ”); bq2=new JLabel( 姓名 ”); bq3=new JLabel(” 性别 ); bq4=new JLabel(” 年龄 ”); bq5=new JLabel( 籍贯 ); bq6=n
18、ew JLabel( 院系 ); wbk1=new JTextField(5); wbk1。setText((String)xsxx2.getValueAt(hang,0); wbk1。setEditable(false); wbk2=new JTextField(5); wbk2。setText((String)xsxx2。getValueAt(hang,1)); wbk3=new JTextField(5); wbk3.setText((String)xsxx2。getValueAt(hang,2)); wbk4=new JTextField(5); wbk4。setText((Strin
19、g)xsxx2。getValueAt(hang,3)。toString(); wbk5=new JTextField(5); wbk5。setText((String)xsxx2.getValueAt(hang,4); wbk6=new JTextField(5); wbk6.setText(String)xsxx2。getValueAt(hang,5)); an1=new JButton(”修改); an1.addActionListener(this); an1。setActionCommand(xiugai1); an2=new JButton(”取消); an2.addActionLi
20、stener(this); an2.setActionCommand(”quxiao); mb1=new JPanel(); mb2=new JPanel(); mb3=new JPanel(); mb4=new JPanel(); mb1.setLayout(new GridLayout(6,1)); mb2.setLayout(new GridLayout(6,1); mb1。add(bq1); mb1。add(bq2); mb1.add(bq3); mb1。add(bq4); mb1。add(bq5); mb1。add(bq6); mb2。add(wbk1); mb2。add(wbk2)
21、; mb2。add(wbk3); mb2。add(wbk4); mb2。add(wbk5); mb2。add(wbk6); mb3.add(an1); mb3。add(an2); this。add(mb1,BorderLayout.WEST); this.add(mb2); this。add(mb3,BorderLayout。SOUTH); this。add(mb4,BorderLayout。EAST); this。setSize(370,270);this.setLocation(401,281);this。setResizable(false);this.setDefaultCloseOp
22、eration(JFrame.DISPOSE_ON_CLOSE);this.setVisible(true); public void actionPerformed(ActionEvent e) if(e.getActionCommand().equals(xiugai1”) PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; Statement sm=null; try Class.forName(sun。jdbc.odbc.JdbcOdbcDriver”); ct=DriverManager。getConne
23、ction(jdbc:odbc:123”,”sa,”123456);String ss=(”update xuesheng set xingming=?,xingbie=?,nianling=?,jiguan=?,yuanxi=? where xuehao=?”); ps=ct。prepareStatement(ss); ps.setString(1,wbk2.getText(); ps.setString(2,wbk3。getText()); ps.setString(3,wbk4。getText()); ps。setString(4,wbk5。getText(); ps.setString
24、(5,wbk6。getText(); ps.setString(6,wbk1。getText()); ps.executeUpdate(); this。dispose(); catch (Exception e2) finally try if(rs!=null)rs。close(); if(ps!=null)ps。close();if(ct!=null)ct。close(); catch (Exception e3) else if(e。getActionCommand().equals(”quxiao) this。dispose();/关闭当前窗口 class Tianjia extend
25、s JDialog implements ActionListener JLabel bq1,bq2,bq3,bq4,bq5,bq6; JTextField wbk1,wbk2,wbk3,wbk4,wbk5,wbk6; JButton an1,an2; JPanel mb1,mb2,mb3,mb4; public Tianjia(Frame fck,String ckm,Boolean msck) super(fck,ckm,msck); bq1=new JLabel(” 学号 ); bq2=new JLabel( 姓名 ); bq3=new JLabel(” 性别 ”); bq4=new J
26、Label( 年龄 ); bq5=new JLabel( 籍贯 ); bq6=new JLabel(” 院系 ); wbk1=new JTextField(5); wbk2=new JTextField(5); wbk3=new JTextField(5); wbk4=new JTextField(5); wbk5=new JTextField(5); wbk6=new JTextField(5); an1=new JButton(添加”); an1.addActionListener(this); an1.setActionCommand(tianjia2); an2=new JButton
27、(取消); an2。addActionListener(this); an2.setActionCommand(”quxiao”); mb1=new JPanel(); mb2=new JPanel(); mb3=new JPanel(); mb4=new JPanel(); mb1。setLayout(new GridLayout(6,1)); mb2。setLayout(new GridLayout(6,1); mb1。add(bq1); mb1。add(bq2); mb1.add(bq3); mb1.add(bq4); mb1.add(bq5); mb1。add(bq6); mb2.ad
28、d(wbk1); mb2.add(wbk2); mb2.add(wbk3); mb2.add(wbk4); mb2.add(wbk5); mb2.add(wbk6); mb3.add(an1); mb3。add(an2); this。add(mb1,BorderLayout.WEST); this.add(mb2); this。add(mb3,BorderLayout.SOUTH); this.add(mb4,BorderLayout。EAST); this.setSize(370,270);this。setLocation(401,281);this.setResizable(false);
29、this.setDefaultCloseOperation(JFrame。DISPOSE_ON_CLOSE);this。setVisible(true); public void actionPerformed(ActionEvent e) if(e.getActionCommand()。equals(tianjia2”) PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; Statement sm=null; try Class。forName(”sun.jdbc.odbc。JdbcOdbcDriver); ct
30、=DriverManager。getConnection(”jdbc:odbc:123,sa”,123456”); String ss=(insert into xuesheng values(?,?,?,?,?,?)”); ps=ct。prepareStatement(ss); ps.setString(1,wbk1.getText()); ps.setString(2,wbk2。getText(); ps.setString(3,wbk3。getText(); ps。setString(4,wbk4。getText()); ps。setString(5,wbk5。getText()); ps。setString(6,wbk6。getText(); ps。executeUpdate(); this。dispose(); catch (Exception e2) finally try if(rs!=null)rs。close(); if(ps!=null)ps.close();if(ct!=null)ct.close(); catch (Exception e3) else if(e.getActionCommand()。equals(quxiao”)) this。dispose();