




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
由于对数据库操作后有很多重复代码.这样可以把操作封装成一个类,这个类可以完成对表的操作.第七十一讲: 初步理解 模式的概念(mv):增加项目的可维护性,尤其在做一个大项目的时候,如果没有一个好的方案的话,那么就会很悲剧了.软件开发也是一个渐进的过程./* * 写成一个 ming版的学生管理系统 * 1,查询任务 * 2,添加学生 */package com.test1;import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;public class StudentManagement extends JFrame implements ActionListener /定义一些控件JPanel jp1,jp2;JLabel jl;JButton jb1,jb2,jb3,jb4;JTable jt ;JTextField jtf;JScrollPane jsp =null;Connection ct=null;PreparedStatement ps=null;StuModel sm=null;public static void main(String args) StudentManagement ta=new StudentManagement();public StudentManagement()jp1=new JPanel();jl=new JLabel(请输入名字:);jtf=new JTextField(20);jb1=new JButton(查询);/注册监听jb1.addActionListener(this);/把各个控件加入到jp1;jp1.add(jl);jp1.add(jtf);jp1.add(jb1);jp2=new JPanel();jb2=new JButton(添加);jb3 =new JButton(修改);jb4 =new JButton(删除);/注册监听jb2.addActionListener(this);jb3.addActionListener(this);jb4.addActionListener(this);jp2.add(jb2);jp2.add(jb3);jp2.add(jb4);/创建一个数据模型对象 sm =new StuModel();/初始化JTablejt=new JTable(sm);/初始化jspjsp=new JScrollPane(jt);/吧jsp放进到JFramethis.add(jsp);this.add(jp1,BorderLayout.NORTH);this.add(jp2,BorderLayout.SOUTH);this.setSize(500,400);this.setLocation(200, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stub/判断是那个按钮被点击/如果相应与监听在同一个类中 也可以用下面方法.if(e.getSource()=jb1)/System.out.println(用户希望查询);测试用的/因为把表的数据封装到StuModel中,我们就可以比较简单地完成查询任务String name=this.jtf.getText().trim();/写一个sql语句String sql =select * from student where stuName=+name+;/构建新的数据模型类并更新sm =new StuModel(sql);jt.setModel(sm);/当用户点击添加else if(e.getSource()=jb2)/合理应该为模式的状态,否则,还没有插完就会执行下面的语句,导致无法更新.StuAddDialog sad =new StuAddDialog(this,添加学生,true);/重新再获得新的数据模型 sm =new StuModel();jt.setModel(sm);else if(e.getSource()=jb3)System.out.print(aaaa);int rownum =this.jt.getSelectedRow();if(rownum=-1)/提示JOptionPane.showMessageDialog(this, 请选择一行);return;/代表不要再往下面走了,谁调用就返回给谁/显示修改对话框new StudentUpdateDialog(this,修改对话框,true,sm,rownum);/当前用户点击删除else if(e.getSource()=jb4)/得到该学生的id/getSelectedRo会返回用户点击的行/如果一行都没选,则会返回-1int rownum=this.jt.getSelectedRow();if(rownum=-1)/提示JOptionPane.showMessageDialog(this, 请选择一行);return;/代表不要再往下面走了,谁调用就返回给谁/得到学生的编号String stuId=(String)sm.getValueAt(rownum, 0);/System.out.print(stuId);/测试用的/连接数据库,完成删除任务try/加载驱动Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);/System.out.print(1);/测试用的/得到连接ct=DriverManager.getConnection(jdbc:sqlserver:/127.0.0.1:1433;databaseName=spdb1,sa,h123);/System.out.print(2);/测试用的ps=ct.prepareStatement(delete from student where stuid=+stuId+);/System.out.print(3);/测试用的ps.executeUpdate();catch(Exception ex)ex.printStackTrace();finallytry if(ps!=null) ps.close();if(ct!=null) ps.close(); catch (SQLException e1) / TODO Auto-generated catch blocke1.printStackTrace(); sm =new StuModel();jt.setModel(sm);/* * 这是我的一个Student表的模型 * 可以把对student表的各种操作封装到该模型中 */package com.test1;import java.sql.*;import java.util.Vector;import javax.swing.JTable;import javax.swing.table.AbstractTableModel;public class StuModel extends AbstractTableModelVector rowData, columnNames; JTable jt=null;/定义操作数据库需要的东西PreparedStatement ps=null;Connection ct=null;ResultSet rs =null;public void init(String sql)if(sql =null)sql =select * from student;/中间处理jt =new JTable();columnNames=new Vector();/设置列名columnNames.add(学号);columnNames.add(名字);columnNames.add(性别);columnNames.add(年龄);columnNames.add(籍贯);columnNames.add(系别);/rowData可以存放多行rowData =new Vector();try/加载驱动Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);/System.out.print(1);/测试用的/得到连接ct=DriverManager.getConnection(jdbc:sqlserver:/127.0.0.1:1433;databaseName=spdb1,sa,h123);/System.out.print(2);/测试用的ps=ct.prepareStatement(sql);/System.out.print(3);/测试用的rs=ps.executeQuery();/System.out.print(4);/测试用的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);/加入到rowDatarowData.add(hang);/System.out.print(5);/测试用的catch(Exception e)e.printStackTrace();finallytry if(rs!=null) rs.close();if(ps!=null) ps.close();if(ct!=null) ct.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();/通过传递的sql语句来获得数据模型public StuModel(String sql)init(sql);/构造函数,初始化我们的数据模型public StuModel()this.init(null);public void addStu(String sql)/根据用户输入的sql语句完成添加任务.Overridepublic String getColumnName(int column) / TODO Auto-generated method stubreturn (String)this.columnNames.get(column);Override/得到共有多少列public int getColumnCount() / TODO Auto-generated method stub/System.out.print(getColumnCount);/测试所用return this.columnNames.size();Override/得到共有多少行public int getRowCount() / TODO Auto-generated method stubreturn this.rowData.size();Override/得到某行某列的数据public Object getValueAt(int rowIndex, int columnIndex) / TODO Auto-generated method stubreturn (Vector)this.rowData.get(rowIndex).get(columnIndex);package com.test1;import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;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;/构造函数 Frame代表父窗口口,title代表窗口的名字,model指定是模式窗口,还是非模式的窗口public StuAddDialog(Frame owner,String title,boolean model)super(owner,title, model); /调用父类构造方法,达到模式对话框效果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);/展现this.setSize(300,200);this.setLocation(200, 300);this.setVisible(true);Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stubif(e.getSource()=jb1)/对用户点击添加按钮后的响应动作/连接数据库Connection ct =null;PreparedStatement ps =null;try /加载驱动Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);/获取连接ct=DriverManager.getConnection(jdbc:sqlserver:/127.0.0.1:1433;databaseName=spdb1,sa,h123);/预编译的都是通过添加参数的方式来赋值ps=ct.prepareStatement(insert into student values (?,?,?,?,?,?);ps.setString(1, this.jtf1.getText();ps.setString(2, this.jtf2.getText();ps.setString(3, this.jtf3.getText();ps.setInt(4, Integer.parseInt(this.jtf4.getText();ps.setString(5, this.jtf5.getText();ps.setString(6, this.jtf6.getText();int i=ps.executeUpdate();if(i=1)System.out.print(添加成功ok);elseSystem.out.print(添加失败); catch (Exception e1) / TODO Auto-generated catch blocke1.printStackTrace();finallytry ps.close();ct.close(); catch (SQLException e1) / TODO Auto-generated catch blocke1.printStackTrace();/* * 修改学生界面 */package com.test1;import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;public class StudentUpdateDialog 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;/构造函数 Frame代表父窗口口,title代表窗口的名字,model指定是模式窗口,还是非模式的窗口public StudentUpdateDialog(Frame owner,String title,boolean model,StuModel sm,int rownum)super(owner,title, model); /调用父类构造方法,达到模式对话框效果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();/初始化数据jtf1.setText(String)sm.getValueAt(rownum, 0);jtf1.setEditable(false);jtf2.setText(String)sm.getValueAt(rownum, 1);jtf3.setText(String)sm.getValueAt(rownum, 2);jtf4.setText(sm.getValueAt(rownum, 3)+);jtf5.setText(String)sm.getValueAt(rownum, 4);jtf6.setText(String)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);/展现this.setSize(300,200);this.setLocation(200, 300);this.setVisible(true);Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stubif(e.getSource()=jb1)/对用户点击添加按钮后的响应动作/连接数据库Connection ct =null;PreparedStatement ps =null;try /加载驱动Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);/获取连接ct=DriverManager.getConnection(jdbc:sqlserver:/127.0.0.1:1433;databaseName=spdb1,sa,h123);/预编译的都是通过添加参数的方式来赋值ps=ct.prepareStatement(update student set stuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuId=?);ps.setString(1, this.jtf2.getText();ps.setString(2, this.jtf3.getText();ps.setInt(3, Integer.parseInt(this.jtf4.getText();ps.setString(4, this.jtf5.getText();ps.setString(5, this.jtf6.getText();ps.setString(6, this.jtf1.getText();int i=ps.executeUpdate();if(i=1)System.out.print(修改成功ok);elseSystem.out.print(修改失败); catch (Exception e1) / TODO Auto-generated catch blocke1.printStackTrace();finallytry ps.close();ct.close(); catch (SQLException e1) / TODO Auto-generated catch blocke1.printStackTrace();第七十二讲:下面将前面的model1模式改成model2模式Model2模式的最大特点是: 界面和后台操作是分离的,代码复用性高,可读性好,可维护性高;缺点是:复杂性高.现在大部分公司采用的是model2模式./* * Model2 模式 * 写成一个 ming版的学生管理系统 * 1,查询任务 * 2,添加学生 */package com.test2;import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;public class StudentManagement extends JFrame implements ActionListener /定义一些控件JPanel jp1,jp2;JLabel jl;JButton jb1,jb2,jb3,jb4;JTable jt ;JTextField jtf;JScrollPane jsp =null;StuModel sm=null;public static void main(String args) StudentManagement ta=new StudentManagement();public StudentManagement()jp1=new JPanel();jl=new JLabel(请输入名字:);jtf=new JTextField(20);jb1=new JButton(查询);/注册监听jb1.addActionListener(this);/把各个控件加入到jp1;jp1.add(jl);jp1.add(jtf);jp1.add(jb1);jp2=new JPanel();jb2=new JButton(添加);jb3 =new JButton(修改);jb4 =new JButton(删除);/注册监听jb2.addActionListener(this);jb3.addActionListener(this);jb4.addActionListener(this);jp2.add(jb2);jp2.add(jb3);jp2.add(jb4);/创建一个数据模型对象 sm =new StuModel();/初始化JTablejt=new JTable(sm);/初始化jspjsp=new JScrollPane(jt);/吧jsp放进到JFramethis.add(jsp);this.add(jp1,BorderLayout.NORTH);this.add(jp2,BorderLayout.SOUTH);this.setSize(500,400);this.setLocation(200, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stub/判断是那个按钮被点击/如果相应与监听在同一个类中 也可以用下面方法.if(e.getSource()=jb1)/因为把表的数据封装到StuModel中,我们就可以比较简单地完成查询任务String name=this.jtf.getText().trim();/写一个sql语句String sql =select * from student where stuName=+name+;/构建新的数据模型类并更新sm =new StuModel(sql);jt.setModel(sm);/当用户点击添加else if(e.getSource()=jb2)/合理应该为模式的状态,否则,还没有插完就会执行下面的语句,导致无法更新.StuAddDialog sad =new StuAddDialog(this,添加学生,true);/重新再获得新的数据模型 sm =new StuModel();jt.setModel(sm);else if(e.getSource()=jb3)System.out.print(aaaa);int rownum =this.jt.getSelectedRow();if(rownum=-1)/提示JOptionPane.showMessageDialog(this, 请选择一行);return;/代表不要再往下面走了,谁调用就返回给谁/显示修改对话框new StudentUpdateDialog(this,修改对话框,true,sm,rownum);/当前用户点击删除else if(e.getSource()=jb4)/得到该学生的id/getSelectedRo会返回用户点击的行/如果一行都没选,则会返回-1int rownum=this.jt.getSelectedRow();if(rownum=-1)/提示JOptionPane.showMessageDialog(this, 请选择一行);return;/代表不要再往下面走了,谁调用就返回给谁/得到学生的编号String stuId=(String)sm.getValueAt(rownum, 0);/System.out.print(stuId);/测试用的StuModel temp=new StuModel();/创建一个sql 语句String sql =delete from student where stuId=?;String paras =stuId;if(!temp.updateStudent(sql, paras)/提示JOptionPane.showMessageDialog(this, 删除失败); sm =new StuModel();/解决一次无用的查询jt.setModel(sm);/* * 这是我的一个Student表的模型 * 可以把对student表的各种操作封装到该模型中 */package com.test2;import java.sql.*;import java.util.Vector;import javax.swing.JTable;import javax.swing.table.*;public class StuModel extends AbstractTableModelVector rowData, columnNames; JTable jt=null;/定义操作数据库需要的东西PreparedStatement ps=null;Connection ct=null;ResultSet rs =null;String driver=com.microsoft.sqlserver.jdbc.SQLServerDriver;String url=jdbc:sqlserver:/127.0.0.1:1433;databaseName=spdb1;String user=sa;String password =h123;/添加,删除,修改学生 由于添加的参数不确定,因此用数组来传递参数public Boolean updateStudent( String sql,String paras )boolean b=true;try/1加载驱动Class.forName(driver);/2得到连接ct=DriverManager.getConnection(url,user,password);/3创建ps对象ps=ct.prepareStatement(sql);/给ps的?赋值for(int i=0;iparas.length;i+)/sql 中给int 传入String类型,dbms会自动转的.ps.setString(i+1, parasi);/4执行操作if(ps.executeUpdate()!=1)b=false;catch (Exception e)b=false;e.printStackTrace();finallytry if(ps!=null)ps.close();if(ct!=null)ct.close(); catch (SQLException e) e.printStackTrace();return b;public void init(String sql)if(sql =null)sql =select * from student;/中间处理jt =new JTable();columnNames=new Vector();/设置列名columnNames.add(学号);columnNames.add(名字);columnNames.add(性别);columnNames.add(年龄);columnNames.add(籍贯);columnNames.add(系别);/rowData可以存放多行rowData =new Vector();try/加载驱动Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);/System.out.print(1);/测试用的/得到连接ct=DriverManager.getConnection(jdbc:sqlserver:/127.0.0.1:1433;databaseName=spdb1,sa,h123);/Syste
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年5月急救知识考试试题和答案
- 临床技能2025年执业医师考试试题及答案
- 2025年《查对制度》培训考试题与答案
- 水生高等植物栽培工5S管理考核试卷及答案
- 剪纸工设备调试考核试卷及答案
- 离心铸管工主管竞选考核试卷及答案
- 四川省广元市四川师范大学附属万达中学2025年语文高三第一学期期末考试模拟试题
- 高龄者异质化的健康属性、照护结果与效益的研究
- 推拿治疗学考试题库含答案详解【新】
- 教师招聘之《小学教师招聘》复习试题(典优)附答案详解
- 离婚协议书下载电子版完整离婚协议书下载
- 入团积极分子培训
- 大众Polo 2014款说明书
- 新媒体运营全套PPT完整教学课件
- 浸润性膀胱癌保留膀胱的治疗
- (完整word)某某高标准农田建设项目施工组织设计
- YS/T 843-2012预焙阳极用石油焦原料技术要求
- GB/T 31586.1-2015防护涂料体系对钢结构的防腐蚀保护涂层附着力/内聚力(破坏强度)的评定和验收准则第1部分:拉开法试验
- 招标投标法9个课件
- 风疹病毒实验活动风险评估报告
- 免疫学(全套课件)
评论
0/150
提交评论