韩顺平 循序渐进学java 从入门到精通 课件 笔记 第六十八讲-第六十九讲
- 格式:doc
- 大小:59.50 KB
- 文档页数:6
由于对数据库操作后有很多重复代码•这样可以把操作封装成一个类,这个类可以完成对表的操作.第七十一讲:初步理解模式的概念(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 。
JA V A学习记录第一讲//pulic:表示这个类是公共的,一个java文件中只能有一个public类//class :表示这是一个类//Hello:类名(公共类的类名必须和文件名一致)public class Hello{//一个主函数,相当于是程序的入口public static void main (String args[]){/* 多行注释*///System.out.println("hello");int a=10;// 定义一个变量,变量名位a,它的值为10// int为4个字节,long为8个字节int b=20;int result=a+b//输出结果system.out.println("结果是"+result)}}第二讲JA V A基本数据类型四大类型整数类型小数(浮点)类型基本数据类型布尔类型字符类型1.整数类型整数类型表示一个整数,常用的整数类型有:byte, short, int, long范围:byte 一个字节-128 – 127short 两个字节-32768 - 32767int 四个字节-2147483648 – 2147483647long 八个字节一个字节= 八个byte例:一个byte0 0 0 0 0 0 0 1 最高位为符号位0表示正数,1表示负数1 1 1 1 1 1 1 1 – 0 1 1 1 1 1 1 12.小数(浮点)类型常用类型有float, double3.布尔类型可以表示:真或者假,类型是boolean4.字符类型表示单个字符,字符类型是char,chai是两个字节,可以存放汉字。
多个字符称为字符串,在java中用String表示,String属于类。
.在java中,对char进行运算的时候,直接当做ascii码对应的整数对待。
(汉字则是unic码)定义变量int a初始化变量int a = 45给变量赋值int a ; a =45基本数据类型转换int a = 1.2 错误会损失精度double a = 4 正确数据类型可以自动从低精度向高精度转换。
韩顺平java从入门到精通笔记整理1 2011年5月5日星期四第0讲开山篇1. Java se J2se 桌面Java ee J2ee 网络Java me J2me 手机2. SQL server Mysql Oracle3.学习软件编程的注意事项1.高效愉快学习2.先建立一个整体框架然后细节3.用什么再学习什么4.先知道how,再知道why5.软件编程是一门“做中学”学科,做了才会6.适当囫囵吞枣7.琢磨别人怎么做,不是我认为这么做第1讲内容介绍.项目演示.原理剖析1. 课程包括:java面向对象编程,java图形界面,java数据库编程,java文件i/o流,java网络编程,java的多线程2. Java历史:1990 sun 启动绿色计划1992 创建 oak语言—> java1994 gosling 参加硅谷大会演示java功能震惊世界1995 sun 正式发布java第一个版本,目前最新的是jdk7.03. java开发工具:记事本,jcreator,jbuilder,netbean,eclipse4. jdk包括:jre(java运行环境)java的工具:编译器javac.exe解释执行器java.exejava的类库:3600多个,常用的150多个5. 第一个程序://作者:阿贵//功能:显示“HelloWorld”//日期:2011.5.5//public:表示类是公共的,一个文件中只有一个public类//class:表示这个是一个类//HelloWorld:类名(公共类的类名,必须和文件名一样)public class HelloWorld{//一个主函数,程序的入口public static void main (String args[]){//执行语句System.out.println("helloWorld!");}}6. Java源程序(.java文件)——>java字节码文件(.class文件)——>由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——>字节码文件(.class)就会在java虚拟机中执行第2讲变量.数据类型1. 在java里面int占4个字节,long占8个字节2. Java基本数据类型:整数:(byte一个字节:-128---127 int四个字节:-2147483648---+2147483647short两个字节:-32768---+32767 long八个字节: )小数(浮点): float double布尔:boolean字符:char(两个字节,可以存放汉字, char test1 ='中';)引申到字符串(类)3. 在java中对char进行运算的时候,直接是当做ASCII码对应的整数4. 数据不能从高精度到低精度的转换 Byte<short<int<long<float<doublefloat a=3.4;是过不去的,在java中小数默认是double(双精度)的应该写成是float a=3.4f;不过可以强制转换:int a=(int)1.2; int b=(int)1.95. int a=1;int b=a+1.2; a先是往高精度转换,然后赋给b,就报错改成int a=1;doubleb=a+1.2; 或者 int a=1;float b=a+1.2f; 就解决了。
Java学习从入门到精通一、JDK (Java Development Kit)JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 (rt.jar)。
不论什么Java应用服务器实质都是内置了某个版本的JDK。
因此掌握JDK是学好Java的第一步。
最主流的JDK 是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的 JDK 等等。
其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。
而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。
但不管怎么说,我们还是需要先把Sun JDK掌握好。
1、JDK 的下载和安装JDK又叫做J2SE(Java2 SDK Standard Edition),可以从Sun的Java网站上下载到,/j2se/downloads.html ;;;,JDK 当前最新的版本是J2SDK1.4.2,建议下载该版本的JDK,下载页面在这里:/j2se/1.4.2/download.html。
下载好的JDK是一个可执行安装程序,默认安装完毕后会在C:Program FilesJava目录下安装一套JRE(供浏览器来使用),在C:j2sdk1.4.2下安装一套JDK(也包括一套JRE)。
然后我们需要在环境变量PATH的最前面增加java的路径C:j2sdk1.4.2in。
这样JDK就安装好了。
2、JDK的命令工具JDK的最重要命令行工具:java:启动JVM执行 classjavac:Java编译器jar:Java打包工具javadoc:Java文档生成器这些命令行必须要非常非常熟悉,对于每个参数都要很精通才行。
sql server 数据库编程实战
目标:
1,掌握开发小型 中型项目的开发技巧
介绍jude开发工具,用于建模(用于设计软件)
2,理解开发一个项目的流程
3,学会对系统进行分析和设计
4,初步理解模式的概念(mv)
项目开发流程:
第一步:需求分析:分析客户的需求,就是充分理解客户对项目的要求是什
么.(行规先付20%)----->形成一个需求分析文档.
第二步:设计阶段(项目经理或架构师来完成这个阶段):决定用什么技术或者
什么框架 操作系统 数据库 设计文档 形成开发小队
第三步:编码阶段:程序员做的事情.
第四步:测试阶段:测试人员 测试工程师.
其中三四步是交替进行的
第五步:实施阶段.[如果软件比较复杂的话,可能还有一个培训阶段],实施阶段由实施工程师
来做.
理论上不同阶段有不同的人来做的,但是在中国某些公司都是由一个人来做的.
1,学生管理信息系统以及满汉楼管理信息系统
演示满汉楼.
第六十九讲:
学生管理信息系统需求分析:
一、功能说明(使用use case 图来说明---->UML):
UML有两款比较好的开发工具来做建模
java<---->Eclipse
UML<----->Rational rose 2003 (太大了)
UML<----->jude
UML可以做出这样几种图:
use case 用例图--->可以非常清晰地描述该系统有什么角色
时序图
类图
二、设计数据库
字段名 类型 备注
stuId varchar(30) 学生id
stuName Nvarchar 学生名 Not null
stuSex Nchar(1) 性别 男或女default(男)
stuAge Int 年龄 >0
StuJg Nvarchar(20) 籍贯
stuDept Nvarchar(30) 所在系
三、设计界面(原型开发[先搞定界面,再写代码]现在很流行)
/**
* JTable的使用.
*/
package com.test1;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.sql.*;
public class Test1 extends JFrame{
//rowData用来存放行数据
//columnNames存放列名
Vector rowData, columnNames;
JTable jt=null;
JScrollPane jsp =null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test1 t=new Test1();
}
public Test1()
{
columnNames=new Vector();
//设置列名
columnNames.add("学号");
columnNames.add("名字");
columnNames.add("性别");
columnNames.add("年龄");
columnNames.add("籍贯");
columnNames.add("系别");
//rowData可以存放多行
rowData =new Vector();
Vector hang =new Vector();
hang.add("sp001");
hang.add("孙悟空");
hang.add("男");
hang.add("500");
hang.add("花果山");
hang.add("少林寺");
//加入到rowData
rowData.add(hang);
//初始化JTable
jt=new JTable(rowData, columnNames);
//初始化jsp
jsp=new JScrollPane(jt);
//吧jsp放进到JFrame
this.add(jsp);
this.setSize(500,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
/**
* 从数据库里读取数据.
*/
package com.test2;
import java.util.Vector;
import javax.swing.*;
import javax.swing.*;
import javax.swing.*;
import java.sql.*;
public class Test2 extends JFrame{
//rowData用来存放行数据
//columnNames存放列名
Vector rowData, columnNames;
JTable jt=null;
JScrollPane jsp =null;
//定义操作数据库需要的东西
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs =null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 t=new Test2();
}
public Test2()
{
columnNames=new Vector();
//设置列名
columnNames.add("学号");
columnNames.add("名字");
columnNames.add("性别");
columnNames.add("年龄");
columnNames.add("籍贯");
columnNames.add("系别");
//rowData可以存放多行
rowData =new Vector();
try
{
//加载驱动
Class.forName("com.mocrosoft.jdbc.sqlserver.SQLServerDriver");
//得到连接
ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.
0.1:1433:databaseName=spdb1","sa","h123");
ps=ct.prepareStatement("select * from stu");
rs=ps.executeQuery();
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));
//加入到rowData
rowData.add(hang);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(ct!=null) ct.close();
}
//初始化JTable
jt=new JTable(rowData, columnNames);
//初始化jsp
jsp=new JScrollPane(jt);
//吧jsp放进到JFrame
this.add(jsp);
this.setSize(500,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}