《Java编程指南》PPT课件.ppt_第1页
《Java编程指南》PPT课件.ppt_第2页
《Java编程指南》PPT课件.ppt_第3页
《Java编程指南》PPT课件.ppt_第4页
《Java编程指南》PPT课件.ppt_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVA编程指南,1,JAVA语言介绍,1991年,Java语言诞生在美国SUN公司。Java是目前最常用的计算机编程语言,也是主要的网络开发语言之一。Java具有面向对象、分布式和多线程等先进高级计算机语言的特点,同时它还因可移植、安全性能高和网络移动性等逐渐成为一种行业标准。鉴于1.2版与之前版本的巨大差别,SUN公司将1.2版以及其以后版本命名为“Java2”。目前,Java语言的正式版本已经发展到1.5版。J2SE/J2ME/J2EE。,2,课程目标,3,熟练掌握JAVA基本编程结构。熟练掌握Eclipse开发环境。熟练掌握JAVA面向对象的编程思想。熟练掌握JAVA常用类的使用。熟练掌握JDBC技术。熟悉JAVA的I/O处理。熟悉JAVA线程的概念和开发。了解Swing开发。,1.JAVA语言概述,JAVA工作原理JDK对象入门第一个java程序Java程序基本结构Java语言编程规范,4,1.1JAVA工作原理,JVM。java虚拟机是软件模拟的计算机,可以在任何处理器上(无论是在计算机中还是在其它电子设备中)安全并且兼容的执行保存在.class文件中的字节码。Java的“跨平台”是指字节码的跨平台。Java工作原理,如下图:,5,1.2JDK,Sun公司为所有的java程序员提供了一套免费的java开发和运行环境,取名为Java2SDK。JDK的安装与配置参见第二章。,6,1.3对象入门,JAVA是一种纯面向对象的语言。JAVA中的所有东西都是对象。可以将对象想象成为一种新型变量,它保存着数据(属性),而且还可以对自身数据进行操作(方法)。JAVA程序是一大堆对象的组合。通过消息传递,各对象知道自己应该做些什么。如果需要让对象做些事情,则须向该对象“发送一条消息”。具体来说,可以将消息想象成为一个调用请求,它调用的是从属于目标对象的一个方法。每个对象都有自己的存储空间。可容纳其它对象,或者说通过封装现有的对象,可以产生新型对象。每个对象都属于某个类。根据语法,每个对象都是某个类的一个实例。一个类的最重要的的特征就是能将什么消息发给它?,也就是类本身有哪些操作。,7,1.4第一个java程序,packagecom.test.java;importjava.util.Date;publicclassDemo1publicstaticvoidmain(Stringargs)System.out.print(你好,今天是);System.out.println(newDate();,8,1.5java程序基本结构,一个完整的java源程序应该包括下列部分:package语句。该部分至多只有一句,必须放在源程序的第一句。通常把功能相似的类放到一个包(package)中。import语句。该部分可以有若干import语句或者没有,必须放在所有的类定义之前。如果在源程序中用到了除java.lang这个包以外的类,无论是系统的类还是自己定义的包中的类,都必须用import语句标识,以通知编译器在编译时找到相应的类文件。publicclassDefinition。公共类定义部分,至多只有一个公共类的定义。java语言规定该java源程序的文件名必须与该公共类名完全一致。classDefinition。内部类定义部分,可以有0个或者多个类定义。大多JAVA源程序中没有内部类。interfaceDefinition。内部接口定义部分,可以有0个或者多个接口定义。大多JAVA源程序中没有内部接口。,9,1.5java程序基本编程规范,包名:包名是全小写的名词,中间可以由点分隔开,例如:com.test.java。类名:首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写,例如:classHelloWorld。接口名:命名规则与类名相同,例如interfaceCollection。方法名:往往由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,例如:addAccount,getAccount。变量名:全小写,一般为名词,例如:account;常量名:基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,例如:intYEAR,intWEEK_OF_MONTH。HOPERUN在此基本规范的基础上有所扩充,在后续开发介绍中逐步补充。,10,2.JAVA编程环境,JDK安装Eclipse3.1安装Eclipse基本使用介绍创建并运行第一个JAVA程序断点及简单Debug介绍,11,3.JAVA语言基础知识,简单数据类型常量和变量运算符和表达式控制语句数组字符串的处理,12,3.1简单数据类型,java语言的数据类型有简单类型和复合类型。简单数据类型包括:整数类型:byte,short,int,long浮点类型:float,double字符类型:char布尔类型:boolean复合数据类型包括:classinterface数组,13,3.1简单数据类型,不同类型数据间的优先关系如下:低-高byte,short,char-int-long-float-double自动类型转换整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级。强制类型转换高级数据要转换成低级数据,需用到强制类型转换,如:inti;byteb=(byte)i;/*把int型变量i强制转换为byte型*/,14,3.2常量和变量,常量:用保留字final来实现。finalintNUM=100;变量:是java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分。intnCount=0;,15,3.2常量和变量,变量的作用域:按作用域来分,变量可以有下面几种:局部变量、类成员变量、方法参数和例外处理参数。在一个确定的域中,变量名应该是唯一的。局部变量在方法或方法的一个块代码中声明,它的作用域为它所在的代码块(整个方法或方法中的某块代码)。类成员变量后面章节中将详细介绍。方法参数传递给方法,它的作用域就是这个方法。例外处理参数传递给例外处理代码,它的作用域就是例外处理部分。,16,3.3运算符和表达式,运算符:算术运算符:+,*,/,%,+,关系运算符:,=,(右移),(用零来填充位于顶部的位),/*统计1100间的奇数、偶数和总和*/publicclassDemo2publicstaticvoidmain(Stringargs)intnOdd=0;intnEven=0;for(inti=1;i=100;i+)if(i%2=0)nEven+=i;elsenOdd+=i;System.out.println(奇数和:+nOdd);System.out.println(偶数和:+nEven);System.out.println(总和:+(nOdd+nEven);,20,3.5数组,一维数组定义:typearrayName;类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。例如:intcountArray;StringnameArrary;初始化静态初始化:intcountArray=1,2,3,4;动态初始化:intcountArray=newint4;countArray0=1;countArray1=2;数组元素的引用countArray0=1;,21,3.5数组,一维数组使用实例:随机生成10个整数,求最大值。packagecom.test.java;/*一维数组:随机生成10个整数,求最大值*/publicclassDemo3publicstaticvoidmain(Stringargs)intintArray=newint10;intnMax=-1;for(inti=0;iintArray.length;i+)intArrayi=(int)(Math.random()*100);for(inti=0;iintArray.length;i+)System.out.print(intArrayi+,);if(nMaxintArrayi)nMax=intArrayi;System.out.println();System.out.println(最大值:+nMax);,22,3.5数组,二维数组定义:typearrayName;初始化静态初始化:intcountArray=1,1,2,2;动态初始化:intcountArray=newint22;countArray00=1;countArray01=1;数组元素的引用countArray00=1;,23,3.6字符串类String,本节只简单介绍字符串类String的使用,详细介绍见后续章节。String类对象的定义方法有两种:作为简单数据类型定义:StringstrName=“HopeRun”;作为复合数据类型定义:StringstrName=newString(“HopeRun”);在Java语言中,只有String类的对象可以使用定义简单数据类型的方法,定义其他类的对象时,必须使用new操作符。,24,3.6字符串类String,字符串和数字的相互转换:数字转换为String:使用String类静态方法(类方法)String.valueOf()。例如:Strings1=String.valueOf(45);Strings2=String.valueOf(57.67);String转换为数字:String转换为整数:使用Integer类的parseInt()静态方法。例如:inti=Integer.parseInt(“123”);String转换为浮点数:使用Double类的parseDouble()静态方法。例如:doubled=Double.parseDouble(“123.45”);,25,3.7代码基本结构介绍,常量方法参数传递注释,26,4.类和对象,面向对象技术基础面向对象的基本概念面向对象基本特征JAVA语言的面向对象特性类对象面向对象特征抽象类接口内部类,27,4.1面向对象的基本概念,对象:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性(成员变量)和对这组属性进行操作的一组服务(成员方法)组成。类:类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。类的实例化结果就是对象,而对一类对象的抽象就是类。,28,4.1面向对象的基本概念,RTS游戏程序中,类和对象的例子:一般物体类:属性:位置、生命值等。方法:被攻击。战斗单元类:属性:位置、生命值、攻击力、防御力等。方法:被攻击、移动等。一般物体类对象:兵房、兵器库。战斗单元类对象:士兵、坦克、飞机。,29,4.2面向对象的基本特征,封装性封装性就是把对象的属性和方法结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节。封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的交叉感染,使软件错误能够局部化,大大减少查错和排错的难度。,30,4.2面向对象的基本特征,继承性特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。在java语言中,通常我们称一般类为父类(superclass,超类),特殊类为子类(subclass)。例如,上述RTS例子中的战斗单元类可继承自一般物体类。前者为子类,后者为父类。,31,4.2面向对象的基本特征,多态性对象的多态性是指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。同一个属性或方法在一般类及其各个特殊类中可具有不同的语义。例如,上述RTS例子中的一般物体类和战斗单元类的被攻击方法可表现出不同的行为。前者没有任何防御力,而后者有。,32,4.3类,类声明publicabstract|finalclassclassNameextendssuperclassNameimplementsinterfaceNameList类体其中,修饰符public,abstract,final说明了类的属性,className为类名,superclassName为类的父类的名字,interfaceNameList为类所实现的接口列表。类体包括成员变量和成员方法。,33,4.3类,成员变量public|protected|privatestaticfinaltransientvolatiletypevariableName;static:静态变量(类变量)。final:常量。transient:暂时性变量,极少使用。volatile:贡献变量,用于并发线程的共享,极少使用。成员方法方法的实现包括两部分内容:方法声明和方法体。,34,4.3类,方法声明public|protected|privatestaticfinal|abstractnativesynchronizedreturnTypemethodName(paramList)throwsexceptionListstatements方法声明中的限定词的含义:static:类方法,可通过类名直接调用。abstract:抽象方法,没有方法体。final:方法不能被重写。native:集成其它语言的代码。synchronized:控制多个并发线程的访问。方法声明中的参数类型可以是简单数据类型,也可以是复合数据类型。对于简单数据类型来说,java实现的是值传递。对于复合数据类型来说,java实现的引用传递或叫地址传递。,35,4.3类,方法体方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏(此时成员变量的引用需使用this)。,36,4.3类,类实例:packagecom.test.java;/*一般单元类*/publicclassGeneralUnitprivateintunitX;privateintunitY;privateintlifePoint;publicintgetLifePoint()returnlifePoint;publicvoidsetLifePoint(intlifePoint)this.lifePoint=lifePoint;publicvoidbeAttacked(intaccackPoint)this.lifePoint-=accackPoint;,37,4.3类,方法重载方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。,38,4.3类,方法重载实例:packagecom.test.java;/*一般单元类*/publicclassGeneralUnit/.publicvoidbeAttacked(intaccackPoint)this.lifePoint-=accackPoint;publicvoidbeAttacked(BattleUnitobjBattleUnit)this.lifePoint-=objBattleUnit.getAttackPoint();,39,4.3类,构造方法构造方法是一个特殊的方法。Java中的每个类都有构造方法,用来初始化该类的一个对象。构造方法具有和类名相同的名称,而且不返回任何数据类型。构造方法可重载。构造方法只能由new运算符调用。,40,4.3类,构造方法实例:packagecom.test.java;/*一般单元类*/publicclassGeneralUnitprivateintunitX;privateintunitY;privateintlifePoint;publicGeneralUnit(intx,inty,intlifePoint)this.unitX=x;this.unitY=y;this.lifePoint=lifePoint;/.,41,4.4对象,对象的生成对象的生成包括声明、实例化和初始化。格式为:typeobjectName=newtype(paramlist);声明:typeobjectName;声明并不为对象分配内存空间,而只是分配一个引用空间(指针)。实例化:运算符new为对象分配内存空间,它调用对象的构造方法,返回引用。生成:执行构造方法,进行初始化;根据参数不同调用相应的构造方法。,42,4.4对象,对象的使用通过运算符“.”可以实现对属性的访问和方法的调用。对象的清除Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。,43,4.4对象,对象使用实例:GeneralUnitobjGeneralUnit=newGeneralUnit(10,20,2000);objGeneralUnit.beAttacked(20);System.out.println(objGeneralUnit.getLifePoint();,44,4.5面向对象特性,封装性java语言中,对象就是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏。通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。java语言中有四种不同的限定词,提供了四种不同的访问权限。private:该成员只能被这个类本身访问。default(未设置):该成员可以被这个类本身和同一个包中的类所访问。protected:该成员可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。public:该成员可以被所有的类访问。,45,4.5面向对象特性,继承性通过继承可实现代码复用。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量(隐藏)。Java不支持多重继承。superjava中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super的使用有三种情况:访问父类被隐藏的成员变量。调用父类中被重写的方法。调用父类的构造函数。,46,4.5面向对象特性,类继承实例:packagecom.test.java;/*战斗单元类*/publicclassBattleUnitextendsGeneralUnitprivateintattackPoint;privateintdefendPoint;publicBattleUnit(intx,inty,intlifePoint,intattackPoint,intdefendPoint)super(x,y,lifePoint);this.attackPoint=attackPoint;this.defendPoint=defendPoint;publicvoidmove(intx,inty)/.publicintgetAttackPoint()returnattackPoint;publicstaticvoidmain(Stringargs)BattleUnitobjBattleUnit=newBattleUnit(10,10,200,20,8);objBattleUnit.beAttacked(15);System.out.println(objBattleUnit.getLifePoint();,47,4.5面向对象特性,多态性在java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。编译时多态:在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。运行时多态:由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。重写方法的调用原则java运行时,系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法。如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。,48,4.5面向对象特性,多态性实例:GeneralUnit:publicvoidbeAttacked(intaccackPoint)this.lifePoint-=accackPoint;BattleUnit:publicvoidbeAttacked(intaccackPoint)intnLife=this.getLifePoint()+this.defendPoint-accackPoint;this.setLifePoint(nLife);publicstaticvoidmain(Stringargs)GeneralUnitobjGeneralUnit=newGeneralUnit(10,20,2000);objGeneralUnit.beAttacked(20);System.out.println(objGeneralUnit.getLifePoint();BattleUnitobjBattleUnit=newBattleUnit(10,10,200,20,8);objBattleUnit.beAttacked(15);System.out.println(objBattleUnit.getLifePoint();GeneralUnitobjGeneralUnit2=objBattleUnit;/多态objGeneralUnit2.beAttacked(20);System.out.println(objGeneralUnit2.getLifePoint();,49,4.5面向对象特性,其他final关键字final修饰变量,则成为常量。final修饰方法,则该方法不能被子类重写。final修饰类,则类不能被继承。Static关键字如果在声明时不用static关键字修饰,则声明为实例变量和实例方法;反之,则声明为类变量和实例变量。两者区别:实例变量和类变量:每个对象的实例变量都分配内存,不同的实例变量是不同的。类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问。实例方法和类方法:实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。,50,4.5面向对象特性,Static使用实例:packagecom.test.java;/*static*/publicclassDemo5publicstaticintnCount=1;publicvoiddoubleCount()nCount*=2;publicstaticintgetCount()returnnCount;publicstaticvoidmain(Stringargs)Demo5objDemo5_1=newDemo5();objDemo5_1.doubleCount();System.out.println(Demo5.getCount();Demo5objDemo5_2=newDemo5();objDemo5_2.doubleCount();System.out.println(Demo5.getCount();,51,4.6抽象类,Java语言中,用abstract关键字来修饰一个类时,这个类叫做抽象类,用abstract关键字来修饰一个方法时,这个方法叫做抽象方法。抽象类必须被继承,抽象方法必须被重写。抽象方法只需声明,无需实现;抽象类不能被实例化,抽象类不一定要包含抽象方法。若类中包含了抽象方法,则该类必须被定义为抽象类。抽象类主要使用于框架代码的开发中。,52,4.6抽象类,抽象类使用实例:packagecom.test.java;/*抽象类*/publicabstractclassAbstractDemoprotectedStringnameArray;publicAbstractDemo()publicabstractvoidprintName();,53,4.6抽象类,packagecom.test.java;publicclassRealDemo1extendsAbstractDemopublicRealDemo1(StringnameArray)Array=nameArray;publicvoidprintName()for(inti=0;inameArray.length;i+)System.out.print(nameArrayi+,);,54,4.6抽象类,packagecom.test.java;publicclassRealDemo2extendsAbstractDemopublicRealDemo2(StringnameArray)Array=nameArray;publicvoidprintName()for(inti=0;inameArray.length;i+)System.out.print(nameArrayi+-);,55,4.6抽象类,publicstaticvoidmain(Stringargs)StringnameArray=nanjinig,shanghai,beijing;AbstractDemoobj1=newRealDemo1(nameArray);obj1.printName();System.out.println();AbstractDemoobj2=newRealDemo2(nameArray);obj2.printName();,56,4.7接口,接口是抽象类的一种,只包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。它的用处体现在下面几个方面:通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。通过接口指明多个类需要实现的方法。通过接口了解对象的交互界面,而无需了解对象所对应的类。接口较抽象类常用。,57,4.7接口,接口的定义接口声明:publicinterfaceinterfaceNameextendslistOfSuperInterfaceextends子句与类声明的extends子句基本相同,不同的是一个接口可有多个父接口,用逗号隔开,而一个类只能有一个父类。接口体接口体包括常量定义和方法定义。常量定义格式为:typeNAME=value;该常量被实现该接口的多个类共享,自动具有public,final,static的属性。方法体定义格式为:returnTypemethodName(paramlist);自动具有public和abstract属性。,58,4.7接口,接口的实现在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分开。接口类型的使用接口作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。,59,4.7接口,接口使用实例:packagecom.test.java;/*接口*/publicinterfaceInterfaceDemopublicstaticfinalStringnameArray=nanjinig,shanghai,beijing;publicabstractvoidprintName();,60,4.7接口,packagecom.test.java;publicclassInterfaceRealDemo1implementsInterfaceDemopublicvoidprintName()for(inti=0;iStringobjDate=newDate();strDate=sdf.format(objDate);System.out.println(strDate);,81,7.JDBC,JDBC(JavaDataBaseConnectivity)是Java数据库连接API。简单地说,JDBC主要完成3件事情:建立数据库连接。向数据库发送SQL语句。处理数据库返回的结果。,82,7.1建立数据库连接,导入数据库驱动程序包到工程build路径。Oracle驱动程序为:class12.jar。示例代码:publicclassJdbcDemo1publicstaticvoidmain(Stringargs)StringstrDBDriver=oracle.jdbc.driver.OracleDriver;StringstrConUrl=jdbc:oracle:thin:pc179:1521:itfm;StringstrUser=itfm;StringstrPass=itfm;Connectioncon;tryClass.forName(strDBDriver);con=DriverManager.getConnection(strConUrl,strUser,strPass);catch(Exceptione)System.out.println(e);,83,7.2向数据库发送SQL,publicstaticvoidmain(Stringargs)StringstrDBDriver=oracle.jdbc.driver.OracleDriver;StringstrConUrl=jdbc:oracle:thin:pc179:1521:itfm;StringstrUser=itfm;StringstrPass=itfm;Connectioncon=null;Statementstmt=null;tryClass.forName(strDBDriver);con=DriverManager.getConnection(strConUrl,strUser,strPass);stmt=con.createStatement();ResultSetrs=stmt.executeQuery(selectorderid,ordernamefromorderinfo);catch(Exceptione)System.out.println(e);,84,7.3处理数据库返回结果,publicstaticvoidmain(Stringargs)StringstrDBDriver=oracle.jdbc.driver.OracleDriver;StringstrConUrl=jdbc:oracle:thin:pc179:1521:itfm;StringstrUser=itfm;StringstrPass=itfm;Connectioncon=null;Statementstmt=null;tryClass.forName(strDBDriver);con=DriverManager.getConnection(strConUrl,strUser,strPass);stmt=con.createStatement();ResultSetrs=stmt.executeQuery(selectorderid,ordernamefromorderinfo);while(rs.next()System.out.println(rs.getString(orderid)+|+rs.getString(ordername);catch(Exceptione)System.out.println(e);,85,7.4一个完整的JDBC查询例子,publicstaticvoidmain(Stringargs)StringstrDBDriver=oracle.jdbc.driver.OracleDriver;StringstrConUrl=jdbc:oracle:thin:pc179:1521:itfm;StringstrUser=itfm;StringstrPass=itfm;Connectioncon=null;Statementstmt=null;ResultSetrs=null;tryClass.forName(strDBDriver);con=DriverManager.getConnection(strConUrl,strUser,strPass);stmt=con.createStatement();rs=stmt.executeQuery(selectorderid,ordernamefromorderinfo);while(rs.next()System.out.println(rs.getString(orderid)+|+rs.getString(ordername);catch(Exceptione)System.out.println(e);finallytryif(rs!=null)rs.close();if(stmt!=null)stmt.close();if(con!=null)con.close();catch(Exceptionex)System.out.println(ex);,86,7.5添加、删除、更新记录,使用Statement对象的executeUpdate()方法。添加stmt.executeUpdate(“insertinto”);删除stmt.executeUpdate(“delete”);更新stmt.executeUpdate(“update”);executeUpdate方法的返回值:影响的记录个数。,87,7.6预编译SQL,预编译SQL的处理采用Statement的子类PreparedStatement实现。PreparedStatement实例包含已编译的SQL语句。包含于PreparedStatement对象中的SQL语句可具有一个或多个参数(?)。该参数通过适当的setXXX()方法提供。由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。因此,多次执行的SQL语句经常创建为PreparedStatement对象,以提高效率。,88,7.6预编译SQL,预编译SQL实例:查询PreparedStatementpstmt=con.prepareStatement(selectorderid,ordernamefromorderinfowhereorderid=?Andordername=?);pstmt.setString(1,3);pstmt.setString(2,“order3);ResultSetrs=pstmt.executeQuery();,89,7.6预编译SQL,添加StringstrInsertSql=insertintoorderinfo(orderid,ordername,customer)values(?,?,?);PreparedStatementpstmt=con.prepareStatement(strInsertSql);pstmt.setString(1,4);pstmt.setString(2,order4);pstmt.setString(3,customer4);pstmt.executeUpdate();,90,7.6预编译SQL,删除StringstrDeleteSql=deletefromorderinfowhereorderid=?;PreparedStatementpstmt=con.prepareStatement(strDeleteSql);pstmt.setString(1,4);pstmt.executeUpdate();,91,7.6预编译SQL,修改StringstrUpdateSql=updateorderinfosetordername=?whereorderid=?;PreparedStatementpstmt=con.prepareStatement(strUpdateSql);pstmt.setString(1,ordername3);pstmt.setString(2,3);pstmt.executeUpdate();,92,7.7批量SQL处理,Statement:提供addBatch(Stringsql)和excuteBatch()方法批量更新数据。例如:Statementstmt=.stmt.addBatch(insertinto.);stmt.addBatch(sql语句2);stmt.addBatch(sql语句3);.stmt.executeBatch();,93,7.7批量SQL处理,PreparedStatement。.StringstrUpdateSql=updateorderinfosetordername=?whereorderid=?;PreparedStatementpstmt=con.prepareStatement(strUpdateSql);pstmt.setString(1,ordername1);pstmt.setString(2,1);pstmt.addBatch();pstmt.setString(1,ordername2);pstmt.setString(2,2);pstmt.addBatch();.pstmt.executeBatch();,94,7.8JDBC事务处理,在jdbc的数据库操作中,一项事务是由一条或是多条数据库操作所组成的一个不可分割的工作单元。我们通过提交commit()或是回滚rollback()来结束事务的操作。在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。在jdbc中,可以通过调用setAutoCommit(false)禁止自动提交而自定义事务。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用rollback()进行回滚。,95,7.8JDBC事务处理,tryClass.forName(strDBDriver);con=DriverManager.getConnection(strConUrl,strUser,strPass);con.setAutoCommit(false);/自定义事务开始StringstrUpdateSql=updateorderinfosetordername=?whereorderid=?;PreparedStatementpstmt=con.prepareStatement(strUpdateSql);pstmt.setString(1,“ordername1”);/第一个数据库操作pstmt.setString(2,1);pstmt.executeUpdate();pstmt.setString(1,“ordername2”);/第二个数据库操作pstmt.setString(2,2);pstmt.executeUpdate();/提交事务mit();catch(Exceptione)System.out.println(e);if(con!=null)trycon.rollback();/回滚事务catch(Exceptionex1)System.out.println(ex1);finallytryif(rs!=null)rs.close();if(stmt!=null)stmt.close();if(con!=null)con.close();catch(Exceptionex)System.out.println(ex);,96,8.JAVA的I/O处理,Java中的输入输出处理是通过使用流技术,用统一的接口表示而实现的。输入输出流中,最常见的是对文件的处理。Java语言中提供专门处理文件和目录的类。输入输出流根据处理的内容,分为字符流和字节流两种,其中字节流是以byte为基本处理单位的流;而字符流是以16位的Unicode码为处理单位的流。,97,8.1I/O流的层次,字节流从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。InputStream、OutputStreamFileInputStream、FileOutputStr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论