韩顺平.循序渐进学.java.从入门到精通-之一PPT

合集下载

JAVA自学教程(完整版)PPT课件(2024)

JAVA自学教程(完整版)PPT课件(2024)

二分查找
针对有序数组,每次取中间元 素与目标元素比较,缩小查找 范围
12
03 面向对象编程基础
2024/1/27
13
类与对象的概念
类的定义
类是对象的模板,它定 义了对象的属性和方法 。
2024/1/27
对象的概念
对象是类的实例,具有 类定义的属性和行为。
类与对象的关系
类是对象的抽象描述, 而对象是类的具体实现 。
2024/1/27
32
Socket通信原理及示例
Socket通信原理
理解Socket通信的基本原理,掌握Socket 类和ServerSocket类的使用。
TCP编程
学习基于TCP协议的Socket通信,实现客户 端与服务器之间的数据传输。
多线程处理
掌握多线程在Socket通信中的应用,提高服 务器的并发处理能力。
TreeSet类的特点和使用
TreeSet是Set接口的另一个常用实现类,它基于红黑树实 现。TreeSet会对元素进行排序,因此它适用于需要排序的 场景。
26
Map接口及其实现类
01
Map接口的定义和特 点
Map接口表示一种键值对的映射关系 。Map中的每个元素都包含一个键和 一个值,键在Map中是唯一的。
学习ReentrantLock锁的使用,了解 公平锁与非公平锁的区别。
2024/1/27
等待/通知机制
掌握Object类的wait()、notify()和 notifyAll()方法的使用,实现线程间 的通信。
死锁与避免
了解死锁的概念及产生条件,学习如 何避免死锁的发生。
31
网络编程基础
网络编程概述
ArrayList类的特点和使用

韩顺平循序渐进学java从入门到精通课件笔记第七十讲到第七十三讲

韩顺平循序渐进学java从入门到精通课件笔记第七十讲到第七十三讲

由于对数据库操作后有很多重复代码•这样可以把操作封装成一个类,这个类可以完成对表的操作.第七十一讲:初步理解模式的概念(mv):增加项目的可维护性,尤其在做一个大项目的时候,如果没有一个好的方案的话,那么就会很悲剧了•软件开发也是一个渐进的过程•程序结构图说明潭架图用于描叙程序中有多少文件和他们之间的调用关系讲解为什么定义对象为全局变量堆区 代码区1数据区 栈区1 1狂—V -ASID*写成一个ming 版的学生管理系统 * 1 ,查询任务 *2 ,添加学生 */package com.testl; import java.awt.*; import java.awt.eve nt.*; import java.sql.*;import javax.swi ng.*;public class Studen tMa nageme nt exte nds JFrame impleme nts Acti on Listener {//定义一些控件 JPanel jp1 , jp2 ;之对指称 个朗一指反在个耶存还麻 露了薔泄團泄笳St内然导内点的脣 囂码护式是缺不 的一代维大在赶可 最加r de遂间彌nio 和是EJLabel jl ;JButton jb1 , jb2 , jb3 , jb4JTable jt ;JTextField jtfConn ecti on ct =n ullPreparedStateme nt ps =n ullStuModel sm = null ;public static void main( Stri ng[] args) {StudentManagement ta= _ new StudentManagement();}public Stude ntMa nageme nt(){jp1 =new JPa nel();jl =new JLabel( "请输入名字:");jtf =n ew JTextField(20);jb1 =new JButton( "查询");//注册监听jb1 .addActi on Liste ner( this );//把各个控件加入到jp1;j p.add(jl );j p.add(jtf );j p.add(jb1 );jp2 =new JPa nel();jb2 =new JButton( "添加");jb3 = new JButton( "修改");jb4 = new JButton( "删除");//注册监听jb2 .addActionListener( this );jb3 .addActionListener( this );jb4 .addActionListener( this ); JScrollPa ne jsp = n ulljp2 .add( jb2 ); jp2 .add( jb3 ); jp2 .add( jb4 );//创建一个数据模型对象 sm = new StuModel();//初始化JTable jt =new JTable( sm);//初始化jspjsp =new JScrollPane( jt );}@Overridepublic void acti on Performed(Acti on Eve nt e) {//TODO Auto-ge nerated method stub//判断是那个按钮被点击 //如果相应与监听在同一个类中也可以用下面方法if (e.getSource()== jb1 ) {//System.out.pri ntln("//因为把表的数据封装到 StuModel 中,我们就可以比较简单地完成查询任务String name= this . jtf .getText().trim();//写一个sql 语句 Stri ngsql ="select * from stude nt where stuName='" +n ame+//构建新的数据模型类并更新//吧jsp 放进到JFramethi s .add( jsp );thi s .add( jp1 ,BorderLayout. NORT H); thi s .add( jp2 ,BorderLayout. SOUT H); thi s .setSize(500,400); thi s .setLocatio n(200, 200); thi s .setDefaultCloseOperati on( JFrame. thi s .setVisible( true );EXIT_ON_CLOSE );用户希望查询");测试用的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 stuld=(Stri ng) sm.getValueAt(row num, 0);//System.out.pri nt(stuId);//测试用的//连接数据库,完成删除任务 try {//加载驱动Class. forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver"//System.out.pri nt("1");// 测试用的//得到连接atabaseName=spdb1" , "sa" , "h123");//System.out.pri nt("2");// ps=ct .prepareStatement( stuid='" +stuld+ ""');//System.out.pri nt("3");// ps .executeUpdate(); }catch (Excepti on ex) {ex.pri ntStackTrace(); } fin allytry {if ( ps != null ) ps .close(); if ( ct != null ) ps .close(); } catch (SQLException e1) {// TODO Auto-ge nerated catch block e1.pri ntStackTrace(); }}sm = new StuModel(); jt .setModel( sm);ct =DriverMa nager. getC onn ection ("jdbc:sqlserver://127.0.0.1:1433;d);测试用的"delete from stude nt where测试用的*这是我的一个Student表的模型*可以把对student表的各种操作封装到该模型中*/ package com.testl;import java.sql.*;import java.util.Vector;import javax.swi ng.JTable;import javax.swi ng.table.AbstractTableModel;public class StuModel exte nds AbstractTableModel{Vector rowData, colu mnN ames; JTable jt=n ull;//定义操作数据库需要的东西PreparedStateme nt ps=n ull;Connection ct=n ull;ResultSet rs =n ull;public void in it(Stri ng sql){if(sql ==n ull){sql ="select * from stude nt";}〃中间处理jt =new JTable();colu mnN ames=new Vector();〃设置列名columnNames.add("学号");columnNames.add("名字");columnNames.add("性别");columnNames.add("年龄");columnNames.add("籍贯"); columnNames.add("系别");//rowData可以存放多行rowData =new Vector();{//加载驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//System.out.print("1");〃测试用的//得到连接ct=DriverMa nager.getCo nn ecti on("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb1","s a","h123");//System.out.print("2");〃测试用的ps=ct.prepareStateme nt(sql);//System.out.print("3");〃测试用的rs=ps.executeQuery();//System.out.print("4");〃测试用的while(rs. next()){Vector hang =new Vector();han g.add(rs.getStri ng(1));han g.add(rs.getStri ng(2));han g.add(rs.getStri ng(3));han g.add(rs.get In t(4));han g.add(rs.getStri ng(5));han g.add(rs.getStri ng(6));〃加入到rowDatarowData.add(ha ng);}//System.out.print("5");〃测试用的}catch(Excepti on e){e.pri ntStackTrace();}fin ally{try {if(rs!=null) rs.close();if(ps!=n ull) ps.close();if(ct!=null) ct.close();} catch (SQLException e) {// TODO Auto-ge nerated catch block e.pri ntStackTrace();}}〃通过传递的sql语句来获得数据模型public StuModel(String sql){in it(sql);}//构造函数,初始化我们的数据模型public StuModel(){this.i nit(n ull);}public void addStu(Stri ng sql){〃根据用户输入的sql语句完成添加任务•}@Overridepublic String getColu mnN ame(i nt colu mn) { // TODO Auto-ge nerated method stubreturn (Stri ng)this.colu mnN ames.get(colu mn); }@Override〃得到共有多少列public int getColu mnCoun t() {// TODO Auto-ge nerated method stub//System.out.print("getColumnCount");// 测试所用return this.colu mnN ames.size();学习必备 欢迎下载}@Override 〃得到共有多少行 public in t getRowCou nt() {// TODO Auto-ge nerated method stub return this.rowData.size(); }@Override〃得到某行某列的数据public Object getValueAt(i nt row In dex, int colu mnln dex) {// TODO Auto-ge nerated method stubreturn ((Vector)this.rowData.get(rowl ndex)).get(colu mnln dex); }非模式的窗口public StuAddDialog(Frame own er,Stri ng title,packa ge com.test1; import java.awt.*;import java.awt.eve nt.*; import java.sql.*;import javax.swi ng.*;public class StuAddDialog// 定义我需要的swing 组件 exte ndsJDialog impleme nts Actio nListe ner{JLabel jl1 , jl2 ,jl3 ,jl4 , jl5 ,jl6 ;JButt on jb ,jb2JJTextField jtf1 ,jtf2,jtf3 , jtf4,jtf5 , jtf6 ;JPa nel jp1 ,jp2 , jp3 ;//构造函数 Frame 代表父窗口口 ,title 代表窗口的名字,model 指定是模式窗口 ,还是super (owner,title, model); //调用父类构造方法,达到模式对话框效果jl1 =new JLabel( jl2 =new JLabel( jl3 =new JLabel( jl4 =new JLabel( jl5 =new JLabel( jl6 =new JLabel("学号“); "姓名“); "性别"); "年龄"); 籍贯"); 系别");boolea n model)jtf1 =ne w JTextField(); jtf2 =new JTextField();jtf3 =new JTextField();jtf4=ne w JTextField();jtf5 =new JTextField();jtf6 =new JTextField();jb1 =new JButton ( "添加"); jb2 =new JButton ( "取消");jp1 =new JPa nel(); jp2 =new JPa nel(); jp3 =new JPa nel();//设置布局 jp1 .setLayout( jp2 .setLayout(// 添加组件j p .add( jl 1 j p .add( jl 2 j p .add( jl 3 j p .add( jl 4 j p .add( jl5j p.add( jl6jp 2 .add( jtf 1 jp 2 .add( jtf2jp 2 .add( jtf3 jp 2 .add(jtf4jp 2 .add( jtf5jp 2.add( jtf6jp 3 .add( jb1jp 3 .add( jb2this .add( jp1 ,BorderLayout. this .add( jp2 ,BorderLayout.new GridLayout(6,1)); new GridLayout(6,1));WEST); CENTER);this .add( jp3 ,BorderLayout. SOUTH);//注册监听jb1 .addActi on Liste ner( this );//展现this .setSize(300,200); this .setLocatio n(200, 300); this .setVisible( true );@Override public void acti on Performed(Acti on Eve nt e) {//TODO Auto-ge nerated method stubif (e.getSource()== jb1 ) {//对用户点击添加按钮后的响应动作 //连接数据库 Conn ecti on ct =n ull ;PreparedStateme nt ps =n ulltry {//加载驱动Class .forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver"//获取连接getConnection ("jdbc:sqlserver://127.0.0.1:1433;d,"sa" , "h123");预编译的都是通过添加参数的方式来赋值int i=ps.executeUpdate(); if (i==1) {System. out .print( "添加成功 ok");}ps.setStri ng(1. this .jtf1 .getText()); ps.setStri ng(2. this .jtf2 .getText()); ps.setStri ng(3. this .jtf3 .getText());ps.set In t(4, In teger.parseInt (thi ps.setStri ng(5. this .jtf5 .getText());ps.setStri ng(6. this .jtf6.getText()););.jtf4 .getText())); ct=DriverMa nager. atabaseName=spdb1" // ps=ct.prepareStateme nt("in sert into stude nt values (????? ?)"\ ■ J ■ J ■ J ■ J ■ J ■ /else{System. out .print( "添加失败");}} catch (Exception e1) {// TODO Auto-ge nerated catch blocke1.pri ntStackTrace();}fin ally{try {ps.close();ct.close();} catch (SQLException e1) {// TODO Auto-ge nerated catch block e1.pri ntStackTrace();}}/***修改学生界面*/package com.testl;import java.awt.*;import java.awt.eve nt.*;import java.sql.*;import javax.swi ng.*;public class StudentUpdateDialog __________ extends JDialogimpleme nts Acti on Liste ner{//定义我需要的swing组件JLabel jl1 , jl2 , jl3 , jl4 , jl5 , jl6jtf1 =new JTextField();jtf2 =ne w JTextField(); jtf3 =new JTextField();jtf4 =new JTextField();jtf5=ne w JTextField();jtf6 =ne w JTextField();jtf1 .setText((String)sm.getValueAt(rownum, 0)); jtf1 .setEditable( false );jtf2 .setText((Stri ng)sm.getValueAt(row num, 1)); jtf3 .setText((String)sm.getValueAt(rownum, 2)); jtf4.setText(sm.getValueAt(rownum, 3)+"");jtf5 .setText((Stri ng)sm.getValueAt(row num, 4)); jtf6.setText((Stri ng)sm.getValueAt(row num, 5));jb1 =new JButton ( "修改"); jb2 =new JButton ( "取消");jp1 =new JPa nel(); jp2 =new JPa nel(); jp3 =new JPa nel();非模式的窗口public Stude ntUpdateDialog(Frame own er,Str ing title,model,StuModel sm,int rown um)JButton jb1 , jb2 ; JTextField jtfl , jtf2 JPanel jp1 , jp2 , jp3,jtf3 ,jtf4 ,jtf5 ,jtf6//构造函数 Frame 代表父窗口口 ,title代表窗口的名字,model 指定是模式窗口 ,还是boolea nsuper (owner,title, model); //调用父类构造方法,达到模式对话框效果jl1 =new JLabel( jl2 =new JLabel( jl3 =new JLabel( jl4 =new JLabel( jl5 =new JLabel( jl6 =new JLabel("学号“); "姓名“); "性别"); "年龄"); 籍贯"); 系别");//初始化数据//注册监听jb1 .addActi on Liste ner( this );//展现 this .setSize(300,200); this .setLocatio n(200, 300); this .setVisible( true );}@Overridepublic void acti on Performed(Acti on Eve nt e) {//设置布局 jp1 .setLayout( new GridLayout(6,1)); jp2 .setLayout(new GridLayout(6,1));jp 1 .add( jl 1jp1 .add( jl2 jp 1 .add( jl3 jp1 .add( jl4 ); jp1 .add( jl5 ); jp1 .add( jl6 );jp 2 .add( jtf 1 jp 2 .add( jtf2jp 2 .add( jtf3jp 2 .add( jtf4jp 2 .add( jtf5jp 2 .add( jtf6jp 3 .add( jb1jp 3 .add( jb2this .add( jp1 ,BorderLayout. WEST); this .add( jp2 ,BorderLayout. CENTER); this.add( jp3 ,BorderLayout.SOUTH);//添加组件II TODO Auto-ge nerated method stubif (e.getSource()== jb1 ){//对用户点击添加按钮后的响应动作II连接数据库Conn ecti on ct = n ull ;PreparedStateme nt ps = nulltry {II加载驱动Class. forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );II获取连接ct=DriverManager. getConnection ("jdbc:sqlserver://127.0.0.1:1433;d atabaseName=spdb1" , "sa" , "h123");II预编译的都是通过添加参数的方式来赋值ps=ct.prepareStateme nt( "update stude nt setstuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuld=?" );ps.setStri ng(1. this .jtf2 .getText());ps.setStri ng(2. this .jtf3 .getText());ps.set In t(3, Integer. parseInt (this . jtf4 .getText()));ps.setStri ng(4. this .jtf5 .getText());ps.setStri ng(5. this .jtf6 .getText());ps.setStri ng(6. this .jtfl .getText());int i=ps.executeUpdate();if (i==1){System. out .print( }else{System. out .print( } "修改成功ok"); "修改失败");} catch (Exception e1) {II TODO Auto-ge nerated catch blockel.pri ntStackTrace();fin ally{try {ps.close();ct.close();} catch (SQLException e1) {// TODO Auto-ge nerated catch blockel.pri ntStackTrace();}}}}}第七十二讲node 12模式程序框架组图F面将前面的model1模式改成model2模式Model2模式的最大特点是:界面和后台操作是分离的,代码复用性高,可读性好,可维护性高缺点是:复杂性高•现在大部分公司采用的是model2模式.* Model2 模式*写成一个ming版的学生管理系统* 1,查询任务*2,添加学生*/package com.test2;import java.awt.*;import java.awt.eve nt.*;import java.sql.*;import javax.swi ng.*;public class Stude ntMa nageme nt exte nds JFrame impleme nts Action Liste ner {//定义一些控件JPanel jp1,jp2;JLabel jl;JButton jb1,jb2,jb3,jb4;JTable jt ;JTextField jtf;JScrollPa ne jsp =n ull;StuModel sm=null;public static void main( Stri ng[] args) {Stude ntMa nageme nt ta=new Stude ntMa nageme nt();}public Stude ntMa nageme nt(){jp1= new JPa nel();jl=new JLabel("请输入名字:");jtf= new JTextField(20);jb1= new JButton("查询");〃注册监听jb1.addAct ion Liste ner(this);〃把各个控件加入到jp1;jp1.add(jl);jpl.add(jtf);jpl.add(jbl);jp2=new JPa nel();jb2=new JButton("添加");jb3 =new JButton("修改");jb4 =new JButton(” 删除");〃注册监听jb2.addAct ion Liste ner(this);jb3.addAct ion Liste ner(this);jb4.addAct ion Liste ner(this);jp2.add(jb2);jp2.add(jb3);jp2.add(jb4);〃创建一个数据模型对象sm =new StuModel();〃初始化JTablejt=new JTable(sm);〃初始化jspjsp=new JScrollPa ne(jt);〃吧jsp放进到JFramethis.add(jsp);this.add(jp1,BorderLayout.NORTH);this.add(jp2,BorderLayout.SOUTH);this.setSize(500,400);this.setLocatio n(200, 200);this.setDefaultCloseOperatio n(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}@Overridepublic void action Performed(Acti onEvent e) {// TODO Auto-ge nerated method stub〃判断是那个按钮被点击〃如果相应与监听在同一个类中也可以用下面方法.if(e.getSource()==jb1){〃因为把表的数据封装到StuModel中,我们就可以比较简单地完成查询任务Stri ng n ame=this.jtf.getText().trim();//写一个sql语句Stri ng sql ="select * from stude nt 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.pri nt("aaaa");int row num =this.jt.getSelectedRow();if(row num==-1){〃提示JOptionPane.showMessageDialog(this,"请选择一行”); return;//代表不要再往下面走了,谁调用就返回给谁}//显示修改对话框new StudentUpdateDialog(this,"修改对话框",true,sm,rownum);}〃当前用户点击删除else if(e.getSource()==jb4){//得到该学生的id//getSelectedRo会返回用户点击的行//如果一行都没选,则会返回-1in t row num=this.jt.getSelectedRow();if(row num==-1){〃提示JOptionPane.showMessageDialog(this,"请选择一行"); return;//代表不要再往下面走了,谁调用就返回给谁}//得到学生的编号String stuld=(String)sm.getValueAt(rownum, 0);//System.out.print(stuId);// 测试用的StuModel temp=new StuModel();//创建一个sql语句String sql ="delete from stude nt where stuId=?";Strin g[] paras ={stuld}; if(!temp.updateStude nt(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.swi ng.JTable;import javax.sw in g.table.*;public class StuModel exte nds AbstractTableModel{Vector rowData , colu mnN ames ;JTable jt =n ull ;//定义操作数据库需要的东西PreparedStateme nt ps =n ull ;Conn ecti on ct =n ull ;ResultSet rs = null ;Stri ng driver ="com.microsoft.sqlserver.jdbc.SQLServerDriver"Stri ng url ="jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb1"Stri ng user ="sa";Stri ng password = "h123";//添加,删除,修改学生由于添加的参数不确定,因此用数组来传递参数public Boolea n updateStude nt( String sql,Stri ng [] paras ){boolea n 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, paras[i]);}//4执行操作if ( ps .executeUpdate()!=1){b= false ;}}catch (Excepti on e){b= false ;e.pri ntStackTrace();}fin ally{try {if ( ps != null ) ps .close(); if ( ct != null ) ct .close();} catch (SQLException e) { e.pri ntStackTrace();}}return b;}public void in it(Stri ng sql){if (sql == null ){sql = "select * from stude nt"} //中间处理jt = new JTable();colu mnN ames =new Vector();//设置列名//rowData 可以存放多行rowData = new Vector();try{//加载驱动Class. forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );//System.out.pri nt("1");〃测试用的//得到连接ct =DriverMa nager. getC onn ecti on atabaseName=spdb1" , "sa" , "h123");//System.out.pri nt("2");//("jdbc:sqlserver://127.0.0.1:1433;d 测试用的ps=ct .prepareStatement(sql);//System.out.pri nt("3");〃测试用的rs =ps .executeQuery();//System.out.pri nt("4");〃测试用的while ( rs .next()){Vector hang = new Vector();//加入到rowData rowData .add(ha ng);}//System.out.pri nt("5");// } catch (Excepti on e){e.pri ntStackTrace();} fin ally{try {}//构造函数,初始化我们的数据模型public StuModel() 测试用的if ( rs != null if ( ps != null if ( ct != null )rs .close(); ) ps .close(); ) ct .close();} catch (SQLException e) {// TODO Auto-ge nerated catch blocke.printStackTrace();}//通过传递的sql语句来获得数据模型public StuModel(Str ing sql){ini t(sql);{this .init( null );}public void addStu(Stri ng sql){//根据用户输入的sql语句完成添加任务.}@Overridepublic String getColu mnN ame( int colum n) {return (String) this . columnNames .get(column);}@Override//得到共有多少列public int getColum nCou nt() {//System.out.pri nt("getColu mn Cou nt");// 测试所用return this . columnNames .size();}@Override//得到共有多少行public int getRowCou nt() {return this . rowData .size();}@Override//得到某行某列的数据public Object getValueAt( int rowln dex, int colu mnln dex) { return ((Vector) this . rowData .get(rowIndex)).get(columnlndex);package com.test2;import java.awt.*;import java.awt.eve nt.*;import java.sql.*;import javax.sw in g.*;public class StuAddDialog exte nds JDialog impleme nts Acti on Liste ner{ //定义我需要的swing 组件JLabel jl1 , jl2 ,jl3 , jl4 , jl5 ,jl6 ;JButt on jb1 ,jb2JJTextField jtf1 ,jtf2 , jtf3 ,jtf4 ,jtf5 , jtf6 ;JPa nel jp1 , jp2,jp3 ;//构造函数Frame代表父窗口口,title 代表窗口的名字,model指定是模式窗口,还是非模式的窗口public StuAddDialog(Frame own er,Stri ng title,jtf1 =new JTextField( );jtf2 =new JTextField( );jtf3 =new JTextField( );jtf4 =new JTextField( );jtf5=newJTextField();jtf6 =new JTextField( );jb1 =new JButton ( "添加");jb2 =new JButton ( "取消");jp1 =new JPa nel();jp2 =new JPa nel();jp3 =new JPa nel();//设置布局jp1 .setLayout( new GridLayout(6,1));boolea n model)super (owner,title, model); //调用父类构造方法,达到模式对话框效果jl1 =new JLabel( "学号“);jl2 =new JLabel( "姓名“);jl3 =new JLabel( "性别");jl4 =new JLabel( jl5 =new JLabel( jl6 =new JLabel( "年龄"); "籍贯"); "系别");学习必备欢迎下载//注册监听jb1 .addActi on Liste ner(this );//展现this .setSize(300,200);this .setLocatio n(200, 300);this .setVisible( true ); }@Overridepublic void acti on Performed(Acti on Eve nt e) {if (e.getSource()== jb1 ){jp2 .setLayout( new GridLayout(6,1)); jp 1 .add( jl1 jp 1 .add( jl2 jp 1 .add( jl3 jp 1 .add( jl4 jp 1 .add( jl5 jp 1 .add( jl6 jp 2 .add( jtf 1 jp 2 .add( jtf 2 jp 2 .add( jtf 3 jp 2 .add( jtf 4 jp 2 .add( jtf 5 jp 2 .add( jtf 6 jp 3 .add( jb 1 jp 3 .add( jb 2 //添加组件 ); ); ); ); ); ); ); ); ); ); ); ); this this this ); ); .add( jp1 ,BorderLayout. .add( jp2 ,BorderLayout. .add( jp3 ,BorderLayout.WEST); CENTER); SOUTH); //希望添加StuModel temp = new StuModel();学习必备 欢迎下载String sql= "insert into student values (?,?,?,?,?,?)"Stri ngjtf5 .getText(), jtf6 .getText()}; if (!temp.updateStudent(sql, paras)){//提示JOptionPane.showMessageDialog (this ,"添加失败");}//关闭对话框,关闭添加对话框this .dispose 。

韩顺平循序渐进学java从入门到精通课件笔记29讲到31讲

韩顺平循序渐进学java从入门到精通课件笔记29讲到31讲

韩顺平循序渐进学java从入门到精通课件笔记29讲到31讲项目经理:1、懂技术2、懂行业图形界面(gui)1、sun已经提供了一个跨平台gui开发工具包awt提供了好多类与接口。

但有缺点《致命的一个本地化lcd》2、sun又创建了一个swing框架,解决了lcd问题。

swing是awt的升级版本。

就是继承的关系。

3、IBM认为swing消耗内存,创建了一个新的gui库,就是swt。

4、IBM为了方便开发swt程序,在swt基础上又创建出一个更易用,功能强大的图形包JFace。

我们重点学习swing。

了解awt。

做图形界面在MyEclipse下开发。

Eclipse最早是IBM附属公司oti开发的。

是开源的,可扩展的开发环境,是最流行的java 开发工具,但是不能开发java ee项目,否则需要安装MyEclipse,现在一般都安装MyEclipse,不单独安装Eclipse。

IDE 集成开发环境。

(vs2005 jcreater MyEclipse等等)开发java的IDE:NetBeans jbuilder jcreater MyEclipseswing组件一览表JFrame是Frame的子类,JButton也属于容器类的布局管理器:通过布局管理器来管理控件的大小与位置。

共五种,常用3种,流式布局管理器,边界布局管理器,网格布局管理器,卡片布局管理器,网格包布局管理器第三十讲:边界布局管理器:将容器化为东南西北中五个区域,中间区域最大。

JFrame JDialog对话框自建默认的是边界布局。

注意事项:1、不是五个部件都必须添加2、中部组件会自动的调节大小3、JFrame JDialog默认布局管理器就是BorderLayout。

/***BorderLayout布局*1继承JFrame*定义需要的组件*创建组件(构造函数)*添加组件*对窗体设置*/package com.test1;import java.awt.*;import javax.swing.*;public class Demo8_2 extends JFrame {JButton jb1,jb2,jb3,jb4,jb5;public static void main(String[] args) {Demo8_2 dd =new Demo8_2();}public Demo8_2(){//创建组件jb1=new JButton("中部");jb2=new JButton("北部");jb3=new JButton("东部");jb4=new JButton("南部");jb5=new JButton("西部");//添加各个组件this.add(jb1,BorderLayout.CENTER);this.add(jb2, BorderLayout.NORTH);this.add(jb3, BorderLayout.EAST);this.add(jb4,BorderLayout.SOUTH);this.add(jb5, BorderLayout.WEST);//设置窗体属性this.setTitle("这是一个演示窗体");this.setSize(200,200);this.setLocation(500, 500);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}}流式布局flowLayout,从左到右跟网页差不多注意事项:1、流式布局不限制所管理组件的大小,允许他们有最佳大小2、当容器被缩放时,组建的位置可能发生变化,但是组建的大小不发生变化(做编程时,通常不许窗口大小变化)3、默认组件是居中对齐的package com.test1;import java.awt.*;import javax.swing.*;;public class demo8_3 extends JFrame{//定义需要组建.JButton jb1,jb2,jb3,jb4,jb5,jb6;public static void main(String[] args) {demo8_3 demo=new demo8_3();}//构造函数public demo8_3(){//创建组件jb1=new JButton("关羽");jb1.setSize(100, 200);jb2=new JButton("张飞");jb3=new JButton("刘备");jb4=new JButton("诸葛亮");jb5=new JButton("曹操");jb6=new JButton("魏延");//添加组件this.add(jb1 );this.add(jb2 );this.add(jb3 );this.add(jb4 );this.add(jb5 );this.add(jb6 );//设置布局管理器,流式布局默认的是居中对齐this.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置窗体属性this.setTitle("这是一个演示窗体");this.setSize(200,280);this.setLocation(500, 500);//禁止用户修改控件大小.this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);}}网格布局:网格布局容器分割为多行多列,将组件放在格中。

韩顺平Java(持续更新中)

韩顺平Java(持续更新中)

韩顺平Java(持续更新中)原创上课笔记,转载请注明出处第⼀章⾯向对象编程(中级部分) PDF为主1.1 IDEA删除当前⾏,ctrl+y复制当前⾏,ctrl+d补全代码,alt+/添加或者取消注释,ctrl+/导⼊该⾏需要的类,alt+enter快速格式化代码,ctrl+ALT+L快速运⾏程序,alt+r(⾃⼰设置)⽣成构造器等,alt+insert查看⼀个类的层级关系,ctrl+H,继承有⽤(光标放在类名上)快速定位某个⽅法的位置,ctrl+B(ctrl+⿏标点击)⾃动分配变量,main⽅法中,.var,例如new Scanner(System.in).var查看快捷键模板:Live Templates (例如,fori)1.2 Object类详解(equals、==、hashCode等)所有类都实现了Object类,都能使⽤Object类的⽅法。

1.2.1 ==运算符基本类型—>判断值是否相等引⽤类型—>判断地址是否相等指向同⼀个地址,结果为true1.2.2 equals()⽅法1.2.2.1 基本介绍Object的equals()⼀⽬了然,==运算符,⽤来判断地址是否相等⽽String等类的equals()被重写了,⽤来判断内容是否相等(根据需求,判断内容相等的标准也是可能会有所改变的)如何重写equals⽅法:Person person1 = new Person("jack", 10, '男');Person person2 = new Person("jack", 20, '男');System.out.println(person1.equals(person2));//假,如果没有重写Person类的equals⽅法,这⾥的equals⽅法调⽤的Object的(即,判断的是地址)⽰例代码://重写Object 的 equals⽅法public boolean equals(Object obj) {//判断如果⽐较的两个对象是同⼀个对象,则直接返回trueif(this == obj) {return true;}//类型判断if(obj instanceof Person) {//是Person,我们才⽐较//进⾏向下转型, 因为我需要得到obj的各个属性Person p = (Person)obj;return .equals() && this.age == p.age && this.gender == p.gender;}//如果不是Person ,则直接返回falsereturn false;}1.2.2.2 课堂练习第三个输出:因为Person并没有重写equals,所以这⾥调⽤的equals⽅法是Object的,判断地址是否相同的,⽽这两个新的对象肯定不相等,所以返回false 这道题需要注意的是,基本数据类型的==运算符是判断内容的1.2.3 hashCode()⽅法1.2.4 toString()⽅法全类名:包名+类名/**Object的toString() 源码(1)getClass().getName() 类的全类名(包名+类名 )(2)Integer.toHexString(hashCode()) 将对象的hashCode值转成16进制字符串*/public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}1.2.5 finalize()⽅法public class Finalize_ {public static void main(String[] args) {Car bmw = new Car("宝马");//这时 car对象就是⼀个垃圾,垃圾回收器就会回收(销毁)对象, 在销毁对象前,会调⽤该对象的finalize⽅法//,程序员就可以在 finalize中,写⾃⼰的业务逻辑代码(⽐如释放资源:数据库连接,或者打开⽂件..)//,如果程序员不重写 finalize,那么就会调⽤ Object类的 finalize, 即默认处理//,如果程序员重写了finalize, 就可以实现⾃⼰的逻辑bmw = null;System.gc();//主动调⽤垃圾回收器System.out.println("程序退出了....");}}class Car {private String name;//属性, 资源。

韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)

韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)

java平台1、J2SE java开发平台标准版2、J2EE java开发平台企业版java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。

不同系统上要安装对应的虚拟机才可以运行java程序开发步骤1、编写源文件 (.java)2、编译源文件为类文件(.class)可用J2SE或J2EE编译3、在虚拟机上运行注释//单行注释/* */多行注释java内容介绍java编程可以分成三个方向:1、java se (j2se)桌面开发 java中的基础中的基础2、java ee (j2ee)web开发3、java me (j2me)手机开发java se课程介绍java面向对象编程(基础)java图开界面开发java数据库编程java文件io流编程java网络编程java多线程编程java ee基础1java面向对象编程--数据库编程-->java sejava 基础2html--css--javascript-->div+cssjava ee中级部分Servlet--Jsp-->mvc模式java ee高级部分Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架java之父gosling1990 sun启动绿色计划1 | 4451992 创建oak语言-->java1994 gosling参加硅谷大会演示java功能,震惊世界1995 sun正式发布java第一个版本,目前最新是jdk7.0java开发工具记事本、(jcreator、jbuilder退出舞台了)、netbean、eclipse如何选择开发工具先选择记事本,对java有一定了解后再使用eclipse高级开发工具为什么呢?1、更深刻的理解java技术,培养代码感2、有利于公司面试java语言的特点1、java语言是简单的2、java语言是面向对象的3、java语言是跨平台(操作系统)的[即一次编译,到处运行]4、java是高性能的java第一个程序hello.java运行java程序要安装和配置jdkjdk是什么?1、jdk全称java dvevlopment kit中文java开发工具包2、jdk是sun公司开发的3、jdk包括jre(java runtime envirnment)java运行环境、一堆java工具和java基础的类库(类共3600左右,常用类在150个左右)4、可以在下载**开发安装jdk,用户执行需要安装jre配置JDK添加环境变量即可windows下配置jdk在计算机属性--高级设置--环境变量--添加PATH将JDK所在路径指定即可。

韩顺平java全部内容笔记

韩顺平java全部内容笔记

韩顺平java全部内容笔记韩顺平是一位伟大的计算机科学家,他的Java全部内容笔记,是学习Java的非常好的资料。

该笔记共有近1000页,内容全面详细,涵盖了Java的各个方面,以下是简单介绍:第一部分:Java基础1. Java入门:简介、JDK、Java开发环境的搭建、Hello World程序等。

2. 变量与常量:Java的数据类型、变量的定义与使用、常量的定义与使用等。

3. 运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符等。

4. 控制流程:if语句、switch语句、for循环、while循环、do-while循环等。

5. 数组:一维数组、二维数组、数组排序、数组查找等。

6. 方法:方法的定义与使用、传递参数、返回值等。

7. 面向对象:面向对象的基本概念、类的定义与使用、封装、继承、多态等。

8. 类与对象:类与对象的关系、构造方法、对象成员变量、对象的引用等。

9. 抽象类与接口:抽象类的定义与使用、抽象类与普通类的区别、接口的定义与使用、接口的实现等。

10. 异常处理:异常的概念、异常的分类、异常处理的机制、自定义异常等。

11. 泛型:泛型的定义与使用、泛型类、泛型方法、泛型限定等。

12. 多线程:线程的概念、线程的创建与启动、线程的生命周期、线程的同步、线程通信等。

13. 反射:反射的概念、反射的使用、反射的用途、动态代理等。

14. 注解:注解的概念、注解的使用、自定义注解等。

15. 枚举:枚举的概念、枚举的使用、枚举的用途等。

16. IO流:IO流的基本概念、字节流、字符流、文件读写、序列化等。

17. 网络编程:网络编程的基本概念、Socket编程、服务器与客户端、TCP/UDP等。

18. 数据库编程:数据库的基本概念、JDBC编程、SQL语句、事务等。

19. 集合框架:集合框架的基本概念、ArrayList、LinkedList、HashSet、HashMap 等。

20. JavaWeb编程:Servlet编程、JSP编程、Struts框架、Spring框架、Hibernate 框架等。

韩顺平 循序渐进学java 从入门到精通 课件 笔记 第七十讲到第七十三讲

韩顺平 循序渐进学java 从入门到精通 课件 笔记  第七十讲到第七十三讲

由于对数据库操作后有很多重复代码.这样可以把操作封装成一个类,这个类可以完成对表的操作.第七十一讲: 初步理解模式的概念(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;d atabaseName=spdb1","sa","h123");//System.out.print("2");//测试用的ps=ct.prepareStatement("delete from student wherestuid='"+stuId+"'");//System.out.print("3");//测试用的ps.executeUpdate();}catch(Exception ex){ex.printStackTrace();}finally{try {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.V ector;import javax.swing.JTable;import javax.swing.table.AbstractTableModel; public class StuModel extends AbstractTableModel{V ector 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 V ector();//设置列名columnNames.add("学号");columnNames.add("名字");columnNames.add("性别");columnNames.add("年龄");columnNames.add("籍贯");columnNames.add("系别");//rowData可以存放多行rowData =new V ector();try{//加载驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//System.out.print("1");//测试用的//得到连接ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb1","s a","h123");//System.out.print("2");//测试用的ps=ct.prepareStatement(sql);//System.out.print("3");//测试用的rs=ps.executeQuery();//System.out.print("4");//测试用的while(rs.next()){V ector hang =new V ector();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();}finally{try {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 getV alueAt(int rowIndex, int columnIndex) {// TODO Auto-generated method stubreturn ((V ector)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;d atabaseName=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");}else{System.out.print("添加失败");}} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}finally{try {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;d atabaseName=spdb1","sa","h123");//预编译的都是通过添加参数的方式来赋值ps=ct.prepareStatement("update student setstuName=?,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");}else{System.out.print("修改失败");}} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}finally{try {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.setV isible(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.getV alueAt(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 AbstractTableModel{Vector 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;i<paras.length;i++){//sql 中给int 传入String类型,dbms会自动转的.ps.setString(i+1, paras[i]);}//4执行操作if( ps.executeUpdate()!=1){b=false;}}catch (Exception e){b=false;e.printStackTrace();}finally{try {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;d atabaseName=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();}finally{try {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) {return (String)this.columnNames.get(column);}@Override//得到共有多少列public int getColumnCount() {//System.out.print("getColumnCount");//测试所用return this.columnNames.size();}@Override//得到共有多少行public int getRowCount() {return this.rowData.size();}@Override//得到某行某列的数据public Object getValueAt(int rowIndex, int columnIndex) { return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);}}package com.test2;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) { if(e.getSource()==jb1){//希望添加StuModel temp =new StuModel();String sql="insert into student values (?,?,?,?,?,?)";String[]paras={jtf1.getText(),jtf2.getText(),jtf3.getText(),jtf4.getText(), jtf5.getText(),jtf6.getText()};if(!temp.updateStudent(sql, paras)){//提示JOptionPane.showMessageDialog(this, "添加失败");}//关闭对话框,关闭添加对话框this.dispose();}}}/*** 修改学生界面*/package com.test2;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){String sql ="update student setstuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuId=?";String[]paras={this.jtf2.getText(),jtf3.getText(),this.jtf4.getText(),this. jtf5.getText(),this.jtf6.getText(),this.jtf1.getText()};StuModel temp =new StuModel();temp.updateStudent(sql, paras);}}}第七十三讲: ADO 模型:在函数里需要传值,但是在调用时却不需要传值,那么就可以传入null值,在函数内部先if判断是否为null 如果不是再进行操作,为空的时候在进行为空的操作.或者第二种解决方法来自于: select * from student where 1=1;可以在传入的参数中为1 sql 语句改为select * from student where 1=?简而言之:还是第一个方法好。

《Java培训课件》-从入门到精通

《Java培训课件》-从入门到精通
《Java培训课件》-从入门 到精通
Java培训课件涵盖Java编程语言的各个方面,从基本语法到高级概念,从入门 到精通。为大家提供一条系统性的学习路径。
概述
1 什么是Java?
2 Java的特点
Java是一种跨平台编程语言, 由Sun Microsystems于1995 年首次发布。
面向对象、安全性高、可移 植性好、简单易学,被广泛 应用于网络开发、大数据分 析、游戏开发等领域。
JDBC
Java对数据库编程的API。
JPA
Java永久存储API,是JDBC的替代品。
Java虚拟机和垃圾回收
Java虚拟机同C语言一样都需要进行内存管理。Java的垃圾回收机制大大简化了内存管理的问题。
1 Java虚拟机(JVM)
2 内存管理
JVM是Java程序的运行环境,能够实现跨平台 的运行特点。
数据库编程
Java数据库编程需要掌握JDBC(Java Database Connectivity),将Java程序与数据库连接起来,实现对数据库数 据的操作。
使用方式
先加载驱动程序,建立数据库连接,使用 Statement或PreparedStatement进行操作等。
连接技术
JNDI(Java Naming and Directory Interface) 、 DataSource等连接技术。
继承和多态
1
继承
子类可以继承父类的所有非私有属性和方法。可以实现代码的重用。
2
多态
一种方法可以有多种不同的表现形式。
3
接口
接口是一组与具体实现无关的常量和方法的集合。
异常处理机制
程序执行时,可能会出现各种错误,如空指针异常、类型转换异常等。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档