版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、由于对数据库操作后有很多重复代码.这样可以把操作封装成一个类,这个类可以完成对表的操作.第七十一讲: 初步理解 模式的概念(mv):增加项目的可维护性,尤其在做一个大项目的时候,如果没有一个好的方案的话,那么就会很悲剧了.软件开发也是一个渐进的过程./* * 写成一个 ming版的学生管理系统 * 1,查询任务 * 2,添加学生 */package com.test1;import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;public class StudentManagement ex
2、tends 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 Studen
3、tManagement()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 JButto
4、n("删除");/注册监听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);thi
5、s.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
6、.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)/合理应该为
7、模式的状态,否则,还没有插完就会执行下面的语句,导致无法更新.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, "请选
8、择一行");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, "请选择一行");re
9、turn;/代表不要再往下面走了,谁调用就返回给谁/得到学生的编号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:/12
10、7.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.printStackTrac
11、e();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 jav
12、ax.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 stude
13、nt"/中间处理jt =new JTable();columnNames=new Vector();/设置列名columnNames.add("学号");columnNames.add("名字");columnNames.add("性别");columnNames.add("年龄");columnNames.add("籍贯");columnNames.add("系别");/rowData可以存放多行rowData =new Vector();try/加载驱动Clas
14、s.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(sq
15、l);/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);/加入到rowDatar
16、owData.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)in
17、it(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 me
18、thod 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 stubr
19、eturn (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
20、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("性别");j
21、l4=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 JP
22、anel();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.ad
23、d(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(
24、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");/
25、预编译的都是通过添加参数的方式来赋值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.setStrin
26、g(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 block
27、e1.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,j
28、tf4,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(&qu
29、ot;性别");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.setEdi
30、table(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 ("
31、;取消");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
32、);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-gen
33、erated 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"
34、;,"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.jtf
35、5.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()
36、; 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.*;
37、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 Studen
38、tManagement();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(&quo
39、t;修改");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(
40、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/判断是那个按钮被点击/如果相应与监听在同一个类中 也可以用下面方法.i
41、f(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)/合理应该为模式的状态,否则,还没有插完就会执
42、行下面的语句,导致无法更新.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
43、;/代表不要再往下面走了,谁调用就返回给谁/显示修改对话框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;/代表不要再往下面走了,
44、谁调用就返回给谁/得到学生的编号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, "删除失败");
45、 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=nu
46、ll;/定义操作数据库需要的东西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"/添加,删除,修改学生 由于添加的参数
47、不确定,因此用数组来传递参数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;i<paras.length;i+)/sql 中给int 传入String类型,dbms会自动转的.ps.setString(i+1, pa
48、rasi);/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
49、();columnNames=new Vector();/设置列名columnNames.add("学号");columnNames.add("名字");columnNames.add("性别");columnNames.add("年龄");columnNames.add("籍贯");columnNames.add("系别");/rowData可以存放多行rowData =new Vector();try/加载驱动Class.forName(server.jdbc.SQLServerDriver");/System.out.print("1");/测试用的/得到连接ct=DriverManager.getConnection("jdbc:sqlserver:/127.0.0.1:1433;databas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东司法警官职业学院《新能源材料》2023-2024学年第一学期期末试卷
- 广东省外语艺术职业学院《商务沟通与谈判技巧》2023-2024学年第一学期期末试卷
- 广东轻工职业技术学院《手绘插图技法》2023-2024学年第一学期期末试卷
- 广东农工商职业技术学院《健康评估1》2023-2024学年第一学期期末试卷
- 广东女子职业技术学院《作文教学设计》2023-2024学年第一学期期末试卷
- 广东茂名健康职业学院《物理思维方法》2023-2024学年第一学期期末试卷
- 【原创】2013-2020学年高一生物(苏教版)下学期期末复习试题(一)
- 【创新设计】2022年高三生物(人教版)一轮复习-基础课时案45-细胞工程-考点探究
- 【经济贸易】大学《微观经济学》课件
- 《创业企划书》课件
- 2023年小学五年级数学上学期期末水平测试试卷(天河区)
- 中考数学计算题100道
- 高压变频器整流变压器
- 集团资产重组实施方案
- 《新唯识论》儒佛会通思想研究
- 《减法教育》读书笔记思维导图PPT模板下载
- 慢性阻塞性肺疾病全球倡议(GOLD)
- 工程项目管理(第五版)丛培经 第七章
- GB/T 33195-2016道路交通事故车辆速度鉴定
- GB/T 15176-1994插入式电子元器件用插座及其附件总规范
- GB/T 14383-2008锻制承插焊和螺纹管件
评论
0/150
提交评论