/* 该程序是在韩老师的教程中学习的。 分别使用了model1模式和model2模式进行开发,而且使用了多文件思想,而且我将各个文件都放在同一个文件中,在myeclipse下调试成功。 model1: StuMange文件为主文件(主界面),InsertStudent文件为添加学生(添加学生的界面),UpdateDatabase文件为修改学生(修改学生的界面),StModel为st表的模型 model2: StuMange 文件为主文件(主界面),AddStu 文件为添加学生(添加学生的界面),UpdateStu 文件为修改学生(修改学生的界面),StuModel为st表的模型,SqlHelper为对数据库的操作(将对数据库的操作封装为一个类) 该程序的主要作用是实现了对学生的学号,名字,性别,年龄,籍贯,系别的增删查改的功能 /* ----------------------数据库--------------------- 我建立的数据库名字为 student 而且该程序使用的是单表形式,表名为 st st表的字段,各个字段分别对应学生的学号,名字,性别,年龄,籍贯,系别: create table st ( stId varchar(30) primary key, stNname nvarchar(50) not null, stSex nvarchar(2) check (stSex in('男','女')) default('男'), stAge int check(stAge>0), stBorn nvarchar(30), stDept nvarchar(30), ) */ //------------------------------------------------------ //model1模式开发: //StuMange文件源代码: import java.util.*; import java.sql.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; public class StuMange extends JFrame implements ActionListener { //定义用户界面用到的组件 JLabel userName = null; //要查询的学生的名字 JTextField textField = null; //用户输入的文本框 JButton select = null; //查询按钮 JButton insert = null; //添加按钮 JButton update = null; //修改按钮 JButton delete = null; //删除按钮 JTable table = null; //用于显示数据库调出的数据的表 Panel panel1 = null; Panel panel2 = null; Panel panel3 = null; JScrollPane jscrollPane = null; StModel stModel = null; //st表的模型 private Object PreparedStatement; public static void main(String[] args) { StuMange window = new StuMange(); } public StuMange() { //窗口显示的上部的组件 userName = new JLabel("学生名:"); textField = new JTextField(10); //用户输入文本框限定为最多输入10个字符 select = new JButton("查询"); //查询按钮 //添加到第一个面板中 panel1 = new Panel(); panel1.add(userName); panel1.add(textField); panel1.add(select); //窗口下部的组件 insert = new JButton("添加"); delete = new JButton("删除"); update = new JButton("修改"); //添加到第三个个面板中 panel3 = new Panel(); panel3.add(insert); panel3.add(delete); panel3.add(update); //窗口中部的组件 stModel = new StModel(); stModel.insertDatabase("select * from st"); table = new JTable(stModel); jscrollPane = new JScrollPane(table); //注册事件监听 select.addActionListener(this); insert.addActionListener(this); update.addActionListener(this); delete.addActionListener(this); //将各个组件添加到窗体中 this.add(panel1, BorderLayout.NORTH); this.add(jscrollPane, BorderLayout.CENTER); this.add(panel3, BorderLayout.SOUTH); //设置窗体属性 this.setSize(400, 300); //设置窗口大小 this.setLocation(200, 200); //设置窗口显示的位置 this.setTitle("mini学生信息管理系统"); //设置窗口标题 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口关闭之后其后台程序同时关闭 //this.setResizable(false); //设置窗口不可拉伸 //设置窗口为可见 this.setVisible(true); } public void actionPerformed(ActionEvent e) { //用户点击了查找按钮 if(e.getSource() == select) { String paras = textField.getText().trim(); stModel = new StModel(); stModel.insertDatabase("select * from st where stNname='"+paras+"'"); table.setModel(stModel); } //用户点击了添加按钮 else if(e.getSource() == insert) { InsertStudent insertStudent = new InsertStudent(this, "添加学生", true); //刷新窗口表的数据 stModel = new StModel(); stModel.insertDatabase("select * from st"); table.setModel(stModel); } //用户点击了修改按钮 else if(e.getSource() == update) { int row = this.table.getSelectedRow(); //用户选择的行数 if(-1 == row) //如果用户没有选中行 { JOptionPane.showMessageDialog(this, "请选择一行"); } else { UpdateDatabase updateDatabase = new UpdateDatabase(this, "修改学生", true, stModel, row); //刷新窗口表的数据 stModel =new StModel(); stModel.insertDatabase("select * from st"); table.setModel(stModel); } } //用户点击了删除按钮 else if(e.getSource() == delete) { //数据库 Connection con = null; PreparedStatement ps = null; String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; //jdbc驱动 String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=student"; //数据源 String user = "sa"; //数据库用户密码 String passWord = "123"; //数据库用户sa的密码 int row = this.table.getSelectedRow(); //用户选择的行 if(-1 == row) //用户没有选中行 { JOptionPane.showMessageDialog(this, "请选择一行"); } else { try { //加载jdbc驱动 Class.forName(driver); //连接数据源 con = DriverManager.getConnection(url, user, passWord); //执行sql String sql = "delete from st where stId=?"; String id = (String)(stModel.getValueAt(row, 0)); //获得用户选择的行的学生的学号 ps = con.prepareStatement(sql); ps.setString(1, id); ps.executeUpdate(); //刷新窗口 stModel = new StModel(); stModel.insertDatabase("select * from st"); table.setModel(stModel); } catch(ClassNotFoundException e1) { e1.printStackTrace(); } catch(SQLException e1) { e1.printStackTrace(); } finally { //关闭资源 try { if(null != ps) { ps.close(); } if(null != con) { con.close(); } } catch(SQLException e1) { e1.printStackTrace(); } } } } } } //-------------------------------------------------------- //StModel文件源代码: import java.util.*; import java.sql.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.table.*; import javax.swing.event.*; public class StModel extends AbstractTableModel{ Vector<String> columNames = null; //表的字段名称 Vector<Vector> rowDate = null; //表的数据 //数据库 private Connection con = null; private PreparedStatement ps = null; private ResultSet rs = null; private final static String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; //加载的jdbc驱动 private final static String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=student"; //数据源 private final static String user = "sa"; //数据库的用户名 private final static String passWord = "123"; //数据库的用户名的密码 //对数据库进行查找 public void insertDatabase(String sql) { columNames = new Vector<String>(); //表的字段名称 rowDate = new Vector<Vector>(); //表的数据 columNames.add("学号"); columNames.add("名字"); columNames.add("性别"); columNames.add("年龄"); columNames.add("籍贯"); columNames.add("系别"); try { //加载jdbc驱动 Class.forName(driver); //连接数据源 con = DriverManager.getConnection(url,user,passWord); //执行sql ps = con.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()) { Vector<String> row = new Vector<String>(); row.add(rs.getString(1)); row.add(rs.getString(2)); row.add(rs.getString(3)); row.add(rs.getString(4)); row.add(rs.getString(5)); row.add(rs.getString(6)); rowDate.add(row); //将学生的一条记录(row)添加到rowDate中 } } catch(ClassNotFoundException e) { e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); } finally { //关闭数据库资源 try { if(null != rs) { rs.close(); } if(null != ps) { ps.close(); } if(null != con) { con.close(); } } catch(SQLException e) { e.printStackTrace(); } } } @Override //返回列数 public int getColumnCount() { // TODO Auto-generated method stub return this.columNames.size(); } @Override //返回表的行数 public int getRowCount() { // TODO Auto-generated method stub return this.rowDate.size(); } @Override //得到某行某列的数据 public Object getValueAt(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return ((Vector)this.rowDate.get(rowIndex)).get(columnIndex); } //设置表的字段名 public String getColumnName(int column) { return (String)this.columNames.get(column); } } //-------------------------------------------------------- //InsertStudent文件源代码: import java.sql.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.table.*; import javax.swing.event.*; //添加学生的对话框类 public class InsertStudent extends JDialog implements ActionListener{ private JLabel id, name, sex, age, address, dep; //分别代表学生的学号,名字,性别,年龄,籍贯,系别 private JTextField jtf1, jtf2, jtf3, jtf4, jtf5, jtf6; //用户输入的文本框,分别为学生的学号,名字,性别,年龄,籍贯,系别 private JButton add, canel; //分别为添加按钮和取消按钮 private Panel panel1, panel2, panel3; public InsertStudent(Frame owner, String title, boolean model) { super(owner, title, model); //实现与父类窗口对话 System.out.println("我执行了"); //窗体的西部的组件 id = new JLabel("学号:"); name = new JLabel("姓名:"); sex = new JLabel("性别"); age = new JLabel("年龄"); address = new JLabel("籍贯"); dep = new JLabel("系别:"); //添加到panel1面板中 panel1 = new Panel(new GridLayout(6, 1)); panel1.add(id); panel1.add(name); panel1.add(sex); panel1.add(age); panel1.add(address); panel1.add(dep); //窗体的东部组件 jtf1 = new JTextField(10); jtf2 = new JTextField(10); jtf3 = new JTextField(10); jtf4 = new JTextField(10); jtf5 = new JTextField(10); jtf6 = new JTextField(10); //添加到第二个面板中 panel2 = new Panel(new GridLayout(6, 1)); panel2.add(jtf1); panel2.add(jtf2); panel2.add(jtf3); panel2.add(jtf4); panel2.add(jtf5); panel2.add(jtf6); //窗体北部的控件 add = new JButton("添加"); canel = new JButton("取消"); //注册事件监听 add.addActionListener(this); canel.addActionListener(this); //添加到panel3面板中 panel3 = new Panel(); panel3.add(add); panel3.add(canel); //将各个组件添加到窗体中 this.add(panel1, BorderLayout.WEST); this.add(panel2, BorderLayout.CENTER); this.add(panel3, BorderLayout.SOUTH); //设置对话框属性 this.setSize(300, 200); //设置对话框为可见 this.setVisible(true); } public void actionPerformed(ActionEvent e) { //数据库 Connection con = null; PreparedStatement ps = null; boolean result = true; //记录添加学生是否成功 if(e.getSource() == add) { try { //加载jdbc驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //连接数据源 con = DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=student", "sa", "123"); //执行sql String sql = "insert into st values(?,?,?,?,?,?)"; ps = con.prepareStatement(sql); ps.setString(1, jtf1.getText()); ps.setString(2, jtf2.getText()); ps.setString(3, jtf3.getText()); ps.setString(4, jtf4.getText()); ps.setString(5, jtf5.getText()); ps.setString(6, jtf6.getText()); ps.executeUpdate(); //关闭对话框 this.dispose(); } catch(ClassNotFoundException e1) { result = false; //添加学生记录失败 e1.printStackTrace(); } catch(SQLException e1) { result = false; //添加学生记录失败 e1.printStackTrace(); } finally { //关闭资源 try { if(null != ps) { ps.close(); } if(null != con) { con.close(); } } catch(SQLException e1) { e1.printStackTrace(); } } if(false == result) { JOptionPane.showMessageDialog(this, "失败信息:学号不能重复,性别只能为'男'或者'女',年龄大于0"); } } else if(e.getSource() == canel) { //关闭对话框 this.dispose(); } } } //-------------------------------------------------------- //UpdateDatabase文件源代码 import java.sql.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.table.*; import javax.swing.event.*; public class UpdateDatabase extends JDialog implements ActionListener{ JLabel id,name,sex,age,address,dep; //分别为学生的学号,学生的姓名,学生的性别,学生的年龄,学生的籍贯,学生的系别的标签 JTextField jtf1, jtf2, jtf3, jtf4,jtf5, jtf6; //分别为学生的学号,姓名,性别,年龄,籍贯,系列的输入文本框 JButton update,canel; //分别为修改和取消按钮 Panel panel1 ,panel2, panel3; public UpdateDatabase(Frame own, String title, boolean model, StModel stModel, int row) { super(own, title, model); //实现与父类窗口对话 //窗体西部的组件 id = new JLabel("学号"); name = new JLabel("名字"); sex = new JLabel("性别"); age = new JLabel("年龄"); address = new JLabel("地址"); dep = new JLabel("系别"); //添加到panel1中 panel1 = new Panel(new GridLayout(6, 1)); panel1.add(id); panel1.add(name); panel1.add(sex); panel1.add(age); panel1.add(address); panel1.add(dep); //添加到窗体的东部的组件 jtf1 = new JTextField(10); jtf1.setText((String)(stModel.getValueAt(row, 0))); jtf1.setEditable(false);//设置学号不可修改 jtf2 = new JTextField(10); jtf2.setText((String)(stModel.getValueAt(row, 1))); jtf3 = new JTextField(10); jtf3.setText((String)(stModel.getValueAt(row, 2))); jtf4 = new JTextField(10); jtf4.setText((String)(stModel.getValueAt(row, 3))); jtf5 = new JTextField(10); jtf5.setText((String)(stModel.getValueAt(row, 4))); jtf6 = new JTextField(10); jtf6.setText((String)(stModel.getValueAt(row, 5))); //添加到第二个面板中 panel2 = new Panel(new GridLayout(6, 1)); panel2.add(jtf1); panel2.add(jtf2); panel2.add(jtf3); panel2.add(jtf4); panel2.add(jtf5); panel2.add(jtf6); //窗体南部的组件 update = new JButton("修改"); canel = new JButton("取消"); panel3 = new Panel(); panel3.add(update); panel3.add(canel); //注册事件监听 update.addActionListener(this); canel.addActionListener(this); //添加组件到窗体中 this.add(panel1, BorderLayout.WEST); this.add(panel2, BorderLayout.CENTER); this.add(panel3, BorderLayout.SOUTH); //设置窗体属性 this.setSize(300, 200); //设置窗体为可见 this.setVisible(true); } //响应用户操作 public void actionPerformed(ActionEvent e) { //数据库 Connection con = null; PreparedStatement ps = null; String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; //jdbc驱动 String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=student"; //连接数据源 String user = "sa"; //数据库的用户 String passWord = "123"; //数据库的用户密码 boolean result = true; //记录修改学生是否成功 if(e.getSource() == update) { try { //加载jdbc驱动 Class.forName(driver); //连接数据源 con = DriverManager.getConnection(url,user,passWord); //执行sql String sql = "update st set stNname=?, stSex=?,stAge=?,stBorn=?,stDept=? where stId=? "; ps = con.prepareStatement(sql); //修改学生数据 ps.setString(1, jtf2.getText()); ps.setString(2, jtf3.getText()); ps.setString(3, jtf4.getText()); ps.setString(4, jtf5.getText()); ps.setString(5, jtf6.getText()); ps.setString(6, jtf1.getText()); ps.executeUpdate(); //关闭对话框 this.dispose(); } catch(ClassNotFoundException e1) { result = false; e1.printStackTrace(); } catch(SQLException e1) { result = false; e1.printStackTrace(); } finally { //关闭资源 try { if(null != ps) { ps.close(); } if(null != con) { con.close(); } } catch(SQLException e1) { e1.printStackTrace(); } if(false == result) { JOptionPane.showMessageDialog(this, "失败信息:学号不能重复,性别只能为'男'或者'女',年龄大于0"); } } } else if(e.getSource() == canel) { this.dispose();//关闭对话框 } } } //------------------------------------------------------ //model2模式开发: //StuMange文件源代码: import java.awt.*; import javax.swing.*; import javax.swing.table.*; import java.awt.event.*; import javax.swing.event.*; public class StuMange extends JFrame implements ActionListener { JLabel userName; //学生名 JTextField textField ; //用户输入学生名字的文本框 JButton select, insert, update, delete; //分别代表查询,添加修改,删除的按钮 JTable table; //用于显示数据的表 Panel panel1, panel2; JScrollPane jscrollPane; StuModel stuModel = null; //st表的模型 public static void main(String[] args) { StuMange stuMange = new StuMange(); } //构造方法 public StuMange() { //窗体上部的组件 userName = new JLabel("学生名:"); textField = new JTextField(10); select = new JButton("查询"); panel1 = new Panel(); //将组件添加到panel1面板中 panel1.add(userName); panel1.add(textField); panel1.add(select); //窗体的中部组件 stuModel = new StuModel(); stuModel.queryDate("select * from st", null); table = new JTable(stuModel); jscrollPane = new JScrollPane(table); //船体的下部组件 insert = new JButton("添加"); update = new JButton("修改"); delete = new JButton("删除"); panel2 = new Panel(); //将组件添加到panel2面板中 panel2.add(insert); panel2.add(update); panel2.add(delete); //设置事件监听 select.addActionListener(this); insert.addActionListener(this); update.addActionListener(this); delete.addActionListener(this); //将各个组件添加到窗体中 this.add(panel1, BorderLayout.NORTH); this.add(jscrollPane, BorderLayout.CENTER); this.add(panel2, BorderLayout.SOUTH); //设置窗体属性 this.setSize(400, 300); this.setLocation(200, 200); this.setTitle("mini学生信息管理系统"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体为可见 this.setVisible(true); } //响应用户的按键操作 public void actionPerformed(ActionEvent e) { //用户点击了查询按钮 if(e.getSource() == select) { String name = textField.getText().trim(); String sql = "select * from st where stNname=?"; stuModel = new StuModel(); stuModel.queryDate(sql, name); //刷新窗口 table.setModel(stuModel); } //用户点击了添加按钮 else if(e.getSource() == insert) { AddStu addStu = new AddStu (this, "添加学生", true); //刷新窗口 stuModel = new StuModel(); stuModel.queryDate("select * from st", null); table.setModel(stuModel); } //用户点击了修改的按钮 else if(e.getSource() == update) { int row = this.table.getSelectedRow();//获得用户选中的行 if(-1 == row) { JOptionPane.showMessageDialog(this, "请选择行"); } else { UpdateStu updateStu = new UpdateStu(this, "修改学生", true, stuModel, row); //刷新窗口 StuModel stModel = new StuModel(); stModel.queryDate("select * from st", null); table.setModel(stModel); } } //用户点击了删除按钮 else if(e.getSource() == delete) { int row = this.table.getSelectedRow(); //获得用户选中的行 String id = (String)stuModel.getValueAt(row, 0); String sql = "delete from st where stId=?"; String[]paras = {id}; stuModel.updateDatebase(sql, paras); //刷新窗口 StuModel stuModel = new StuModel(); stuModel.queryDate("select * from st", null); table.setModel(stuModel); } } } //-------------------------------------------------------- //AddStu文件源代码: import java.awt.*; import javax.swing.*; import javax.swing.table.*; import java.awt.event.*; import javax.swing.event.*; public class AddStu extends JDialog implements ActionListener { private JLabel id, name, sex, age, address, dep; //分别代表学生的学号,名字,性别,年龄,籍贯,系别 private JTextField jtf1, jtf2, jtf3, jtf4, jtf5, jtf6; //用户输入的文本框,分别为学生的学号,名字,性别,年龄,籍贯,系别 private JButton add, canel; //分别为添加按钮和取消按钮 private Panel panel1, panel2, panel3; public AddStu(Frame owner, String title, boolean model) { super(owner, title, model); //实现与父类窗口对话 System.out.println("我执行了"); //窗体的西部的组件 id = new JLabel("学号:"); name = new JLabel("姓名:"); sex = new JLabel("性别"); age = new JLabel("年龄"); address = new JLabel("籍贯"); dep = new JLabel("系别:"); //添加到panel1面板中 panel1 = new Panel(new GridLayout(6, 1)); panel1.add(id); panel1.add(name); panel1.add(sex); panel1.add(age); panel1.add(address); panel1.add(dep); //窗体的东部组件 jtf1 = new JTextField(10); jtf2 = new JTextField(10); jtf3 = new JTextField(10); jtf4 = new JTextField(10); jtf5 = new JTextField(10); jtf6 = new JTextField(10); //添加到第二个面板中 panel2 = new Panel(new GridLayout(6, 1)); panel2.add(jtf1); panel2.add(jtf2); panel2.add(jtf3); panel2.add(jtf4); panel2.add(jtf5); panel2.add(jtf6); //窗体北部的控件 add = new JButton("添加"); canel = new JButton("取消"); //注册事件监听 add.addActionListener(this); canel.addActionListener(this); //添加到panel3面板中 panel3 = new Panel(); panel3.add(add); panel3.add(canel); //将各个组件添加到窗体中 this.add(panel1, BorderLayout.WEST); this.add(panel2, BorderLayout.CENTER); this.add(panel3, BorderLayout.SOUTH); //设置对话框属性 this.setSize(300, 200); //设置对话框为可见 this.setVisible(true); } //响应用户的操作 public void actionPerformed(ActionEvent e) { //用户点击了添加按钮 if(e.getSource() == add) { String sql = "insert into st values(?,?,?,?,?,?)"; String[]paras = {jtf1.getText(),jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText()}; //建立st表的数据模型 StuModel stuModel = new StuModel(); if(!stuModel.updateDatebase(sql, paras)) { JOptionPane.showMessageDialog(this, "失败信息:学号不能重复,性别只能为'男'或者'女',年龄大于0"); } else { //关闭对话框 this.dispose(); } } else if(e.getSource() == canel) { //关闭对话框 this.dispose(); } } } //-------------------------------------------------------- //UpdateStu文件源代码: import java.awt.*; import javax.swing.*; import javax.swing.table.*; import java.awt.event.*; import javax.swing.event.*; public class UpdateStu extends JDialog implements ActionListener{ JLabel id,name,sex,age,address,dep; //分别为学生的学号,学生的姓名,学生的性别,学生的年龄,学生的籍贯,学生的系别的标签 JTextField jtf1, jtf2, jtf3, jtf4,jtf5, jtf6; //分别为学生的学号,姓名,性别,年龄,籍贯,系列的输入文本框 JButton update,canel; //分别为修改和取消按钮 Panel panel1 ,panel2, panel3; public UpdateStu(Frame owner, String title, boolean model, StuModel stModel, int row) { super(owner, title, model); //窗体西部的组件 id = new JLabel("学号"); name = new JLabel("名字"); sex = new JLabel("性别"); age = new JLabel("年龄"); address = new JLabel("地址"); dep = new JLabel("系别"); //添加到panel1中 panel1 = new Panel(new GridLayout(6, 1)); panel1.add(id); panel1.add(name); panel1.add(sex); panel1.add(age); panel1.add(address); panel1.add(dep); //添加到窗体的东部的组件 jtf1 = new JTextField(10); jtf1.setText((String)(stModel.getValueAt(row, 0))); jtf1.setEditable(false);//设置学号不可修改 jtf2 = new JTextField(10); jtf2.setText((String)(stModel.getValueAt(row, 1))); jtf3 = new JTextField(10); jtf3.setText((String)(stModel.getValueAt(row, 2))); jtf4 = new JTextField(10); jtf4.setText((String)(stModel.getValueAt(row, 3))); jtf5 = new JTextField(10); jtf5.setText((String)(stModel.getValueAt(row, 4))); jtf6 = new JTextField(10); jtf6.setText((String)(stModel.getValueAt(row, 5))); //添加到第二个面板中 panel2 = new Panel(new GridLayout(6, 1)); panel2.add(jtf1); panel2.add(jtf2); panel2.add(jtf3); panel2.add(jtf4); panel2.add(jtf5); panel2.add(jtf6); //窗体南部的组件 update = new JButton("修改"); canel = new JButton("取消"); panel3 = new Panel(); panel3.add(update); panel3.add(canel); //注册事件监听 update.addActionListener(this); canel.addActionListener(this); //添加组件到窗体中 this.add(panel1, BorderLayout.WEST); this.add(panel2, BorderLayout.CENTER); this.add(panel3, BorderLayout.SOUTH); //设置窗体属性 this.setSize(300, 200); //设置窗体为可见 this.setVisible(true); } //响应用户操作 public void actionPerformed(ActionEvent e) { if(e.getSource() == update) { String sql = "update st set stNname=?, stSex=?,stAge=?,stBorn=?,stDept=? where stId=?"; String[] paras = {jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText(),jtf1.getText()}; //建立st表的模型 StuModel stuModel = new StuModel(); if(!stuModel.updateDatebase(sql, paras)) { JOptionPane.showMessageDialog(this, "失败信息:学号不能重复,性别只能为'男'或者'女',年龄大于0"); } else { //关闭对话框 this.dispose(); } } else if(e.getSource() == canel) { //关闭对话框 this.dispose(); } } } //-------------------------------------------------------- //StuModel文件源代码: import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; import javax.swing.table.*; import java.sql.*; public class StuModel extends AbstractTableModel { Vector<Vector> rowDate = null; //记录表的记录 Vector<String> columnNames = null; //记录表的字段名 SqlHelper sqlHelper = null; ResultSet rs = null; //用户对数据库进行查询的操作 public void queryDate(String sql, String paras) { columnNames = new Vector<String>(); columnNames.add("学号"); columnNames.add("名字"); columnNames.add("性别"); columnNames.add("年龄"); columnNames.add("籍贯"); columnNames.add("系别"); rowDate = new Vector<Vector>(); sqlHelper = new SqlHelper(); rs = sqlHelper.queryDatabase(sql, paras); try { while(rs.next()) { Vector<String> row = new Vector<String>(); row.add(rs.getString(1)); row.add(rs.getString(2)); row.add(rs.getString(3)); row.add(rs.getString(4)); row.add(rs.getString(5)); row.add(rs.getString(6)); rowDate.add(row); //将row添加到rowDate中。实现了读取数据库的记录 } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { //关闭资源 if(null != rs) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } sqlHelper.close(); } } //用户对数据库进行增删查的操作 public boolean updateDatebase(String sql, String[] paras) { SqlHelper sqlHelper = new SqlHelper(); return sqlHelper.updateDatabase(sql, paras); } @Override //返回表的列数 public int getColumnCount() { // TODO Auto-generated method stub return this.columnNames.size(); } @Override //返回表的行数 public int getRowCount() { // TODO Auto-generated method stub return this.rowDate.size(); } @Override //返回某行某列 public Object getValueAt(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return ((Vector)this.rowDate.get(rowIndex)).get(columnIndex); } //设置表的字段名 public String getColumnName(int column) { return (String)this.columnNames.get(column); } } //-------------------------------------------------------- //SqlHelper 文件源代码: import java.sql.*; //后台数据库的类 public final class SqlHelper { //数据库 Connection con = null; PreparedStatement ps = null; ResultSet rs = null; private final static String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; //jdbc驱动 private final static String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=student"; //数据源 private final static String user = "sa"; //数据库用户的密码 private final static String password = "123"; //数据库用户sa的密码 //用户对数据库进行数据查询 public ResultSet queryDatabase(String sql, String paras) { try { //加载jdbc驱动 Class.forName(driver); //连接数据源 con = DriverManager.getConnection(url, user, password); //执行sql ps = con.prepareStatement(sql); if(null != paras) { ps.setString(1, paras); } rs = ps.executeQuery(); } catch(ClassNotFoundException e) { e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); } return rs; } //用户对数据库进行增删改的操作 public boolean updateDatabase(String sql, String[] paras) { boolean result = true; //记录对数据库的操作是否成功 try { //加载jdbc驱动 Class.forName(driver); //连接数据源 con = DriverManager.getConnection(url, user, password); //执行sql ps = con.prepareStatement(sql); for(int i = 0; i < paras.length; i++) { ps.setString(i+1, paras[i]); } ps.executeUpdate(); } catch(ClassNotFoundException e) { result = false; e.printStackTrace(); } catch(SQLException e) { result = false; e.printStackTrace(); } finally { //关闭资源 this.close(); } return result; } public void close() { //关闭资源 try { if(null != ps) { ps.close(); } if(null != con) { con.close(); } } catch(SQLException e) { e.printStackTrace(); } } }