面向对象程序设计(java)题库

更新时间:2024-06-01 07:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

面向对象程序设计(java)题库

抽题规范:

(1) 此题库共75道题,抽8道作为期末考试题。其中,易8道,较易33道,较难

18道,难16道.

(2) 按题型,第一大题抽4道,每道10分;第二大题抽2道,每道10分;第三大题抽1

道,每道20分;第四大题抽1道,每道20分。

(3) 按难易程度:易(1道)、较易(4道)、较难(2道)、难(1道)。

一、解答题(共40道,抽4道,每道10分,共40分)

1.面向对象有哪三大特征? 封装,继承,多态. 2.什么是类? (易)

类是定义同一类所有对象的变量和方法的蓝图或原型。 3.什么是对象?

对象是类的实例;对象是通过new className产生的,用来调用类的方法;类的构造方法 .。 4.类和对象的区别是什么?

java中的类是模板,而对象是依据模版产生的实体 5.简述Java的封装性,如何在Java中实现封装

封装性是指的把代码封装到大括号中,只能访问自己内部的数据,外边的东西访问不了。 实现为加访问权限。 6.构造方法有哪些特点

方法名与类名相同,没有返回值,可以有多个重载。 7.构造方法的作用是什么? (较易)

初始化对象,就是你new一个类的时候可以很方便的给你的对象里的属性赋值。 8.this在程序中所代表的意思(易) 指当前对象

9继承的作用是什么? (易) 实现代码复用。

10.Java支持多继承吗? (易) 不能。

11.子类可以继承父类的哪些成员? (较难) 变量和构造方法。

12.简述构造子类对象时子类和父类构造方法执行顺序(较易) 先执行父类再执行子类。

13.什么是方法的重载,如何选择被重载的方法?(较易)

同一个类中如果同时存在两个以上的方法有同一个名字,在这种情况下,我们说方法被重载了,这个过程被称为重载。

14什么是方法的重写,如何选择被重写的方法?(较难)

当同名方法同时存在于子类和父类中时,对于子类来说就是将继承父亲的方法重载写过了,实现功能完全和父类无关。

15.简述重载和覆盖的区别(较易)

重载是让同一方法名的方法可以处理和返回不同类型的数据 而覆盖是在子类中改写父类的方法

16.什么是成员的隐藏?如何访问被隐藏了的父类成员?(较易)

在子类对父类的继承中,如果子类的成员变量和父类的成员变量同名,此时称为子类隐藏了父类的成员变量。 Super语句。

17.简述this和super的区别(较难)

this 即可以拿到自己的也可以拿到父类的, super 只能拿到父类的 18.简述面向对象的多态性(较易) 一个接口,多个方法

19.简述实例变量和类变量的区别(较易) 类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象; 实例变量是类实例化后,系统为其创建的一个类的实例变量的拷贝,即一个实例拥有一个实例变量。

类变量则是用static声明,系统为每个类变量分配一次存储空间。即所有的实例共享一个类变量。

1. 简述静态方法和实例方法的区别(较易)

在外部调用静态方法时,可以使用\类名.方法名\的方式,也可以使用\对象名.方法名\的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。 2. 简述按值传递和按址传递的区别(较难)

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

3. 什么是抽象类?抽象类中一定有抽象方法吗?(较难)

java中用abstract声明的类就叫做抽象类,抽象类中抽象方法可有可无,但通常都含有抽象方法(这是定义抽象类的目的所在)让子类继承,如果子类没有把抽象类中所有的抽象方法都重写,则这个继承了抽象类的子类也会成为抽象类;如果子类把抽象类中所有的抽象方法都重写,则这个子类就可以实例化了。

4. 什么是接口?接口中的成员有什么特点?(较易)

Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口的特点就是实现类必须实现接口中定义的方法; 5. 简述抽象类和接口的区别(较易)

接口可以多重继承,抽象类只能单继承

类实现(implements)某一接口必须实现该接口的所有方法,一个类实现(extends)一个抽象类 则可以根据需要有选择的实现需要的方法

接口是一种标准。

6. extends和implements的区别是什么?(较易)

extends 是继承另外一个类。也就是说那个类里面的方法不需要再写,直接可以拿来用了。

implements 是实现接口,也就是说接口里面的方法都需要自己把它补充完整作为一个可用的方法。

7. final可以用在哪些地方,分别代表什么意思?(较易)

final修饰符可以用来修饰类,类的方法,变量;用final修饰符修饰变量时,一旦该变量获得了初始值之后就不可改变。 用final修饰符修饰的类不能被继承,用final修饰符修饰的方法不能被重写。

8. static可以用在哪些地方,分别代表什么意思?(较易)

用 static 修饰成员变量,使其成为静态变量,该类的所有实例都将共享此变量;用 static 修饰方法,使其成为静态方法,类加载之后你便可以直接调用此方法,而不需要一个此类的实例;用 static 修饰代码块,类加载时会执行这段代码。 9. 静态代码块的作用是什么?它被执行几次?(较易)

static 表示静态方法,用来修饰方法,在main方法里,必须有static ,否则就会报错,但是必须要,并且不能替换,main方法本身就要求是静态的,这是规定。 10. Java中包的作用是什么(易)

JAVA中的包,可以理解为命名空间。

11. 在Java中,import和package的区别?(易)

package 是运行程序后生成的.class文件全部放在了所定义的包中,便于以后调用管理. import 则是在编写程序的时候需要调用某个包中的类. 12. public,protected,default,private的区别(较易)

public是公用的,其他类都可调用.

private是私有的,是最严格的,只有当前类(当前JAVA文件)可以调用,甚至继承当前类的子类都不能调用.

protected解决了private的子类不能调用的缺陷,可以理解为一个继承系下的可以调用

13. 内部类的作用是什么?内部类常用在哪里?(较难)

内部类可以很好的实现隐藏,也就是封装性。一般的非内部类,是不允许有 private 与protected权限的,但内部类可以;内部类拥有外围类的所有元素的访问权限;可是实现多重继承;可以避免修改接口而实现同一个类中两种同名方法的调用。

在这里内部类Inner中关键字this指向内部类Inner的对象,如果要想指向外部类的对象,必须在this指针前加上外部类名称,表示this是指向外部类构造的碎屑。 14. 简述异常处理机制(较难)

在发生异常的地方直接处理;

将异常抛给调用者,让调用者处理。 15. 简述throw和throws的区别(较易)

如果程序在运行中 发生了不允许的情况 比如 除0,比如空指针,常见的异常 JVM会自动的抛出异常,对于 JVM不知道的异常,需要人工抛出 和捕获,放发生异常的时候捕获异常会对异常进行处理。

16. 简述final和finally的区别(较易)

final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

17. 列出三个常见的异常并说明其作用(较易)

空指针错误:使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便不能通过编译,因此使用基本的JAVA数据类型一般不会引起空指针异常。由此可见,空指针异常主要跟与对象的操作相关。

格式化数字错误作用是将用户提交的表单域的值转化为整数。 字符串越界错误功能是获取字符串中的第4个字符。 18. 简述String和StringBuffer的区别(较易)

String对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值. StringBuffer对象实例化后,只对这一个对象操作。

字符串连接操作中StringBuffer的效率要明显比String高。

19. 集合Collection包含哪两大子接口?它们的区别是什么?(较易) Collection接口和List接口 区别是:

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。 20. 如何把一个字节流转换成字符流?(较易)

字节流转换成字符流可以用InputSteamReader/OutputStreamWriter相互转换。 21. 让一个类成为线程有哪两种方式?(较易)

第一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。 第二种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。

二、单项编程(共25题,抽2题,每题10分,共20分)

1. 设计一个矩形类,有长和宽两个属性,能够计算每一个矩形的面积和周长;再编写一

个主类,在其主方法main中创建一个具体的矩形,求出该矩形的周长和面积。(较易)

2. (1)设计一个圆类,有一个属性半径,能够计算每一个圆的面积和周长;再编写一

个主类,在其主方法main中创建一个具体的圆形,求出该圆形的周长和面积。(较易)

3. 设计一个盒子类Box,它有长、宽、高三个私有成员属性,包含无参数和有参数的

构造方法,分别实现设置和获取属性的setter和getter方法,以及求盒子体积的公有方法。其中,构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。再编写一个主类BoxTest,在其主方法main()中创建若干个Box对象,输出其长、宽、高及其体积的值。(较易)

4. 设计一个人类,有姓名、年龄、性别、身高、体重属性,以及吃饭、穿衣服、跑步

行为;再编写一个主类,在其主方法main中创建两个人类对象,并分别为各个对象的属性赋初值,然后打印出各个对象的所有基本信息。(较易)

5. 编写学生类和成绩类。成绩有科目和分数信息。学生有姓名和成绩信息,学生类的

getResult()方法显示输出成绩信息,setData()方法实现初始化学生信息。(较难) 6. (1)定义一个动物类Animal,有动物类型属性type和动物发声的方法sound();

(2)定义基于动物类的狗类Dog和猫类Cat,这两个类都要求覆盖父类的发声方法; (3)定义AnimalDemo类,声明一个Animal对象,分别创建一个Dog、Cat类的对象,然后通过Animal对象来访问Dog、Cat类对象的sound()方法。(难)

7. (1)设计一个表示二维平面上圆的类Circle,有表示圆半径的protected类型的成员

变量radius、获取和设置radius值的public方法、计算圆面积的public方法。 (2)设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量height、获取和设置height值的public方法、计算圆柱体体积的public方法。

(3)建立若干个Cylinder对象,输出其半径、高及其体积的值。 要求:

A、每个类包含无参数和有参数的构造方法。构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。

B、子类的构造方法调用父类的构造方法,对父类中的成员变量初始化。(较难) 8. 请使用继承关系实现下列描述: (较难)

自行车和豪车属于车类型 车(car):车牌号(cid)、车型(dtype)、价值(cvalue) 自行车(bicycle):车牌号(cid)、车型(dtype)、价值(cvalue)、链条(chain) 豪车(limo):车牌号(cid)、车型(dtype)、价值(cvalue)、导航(guide) 9. 使用一个类里面包含其他类的对象的方法实现下列描述:(较难)

有1个组长,手下有2个助手,每个助手有2部车。 组长(leader):姓名(lname)、年龄(lage) 助手(asist):编号(aid)、年龄(aage)、姓名(aname)、爱好(ahobby) 车(car):车牌号(cid)、车型(dtype)、价值(cvalue) 10. 使用一个类里面包含其他类的对象的方法实现下列描述:(较难)

11.

12. 13.

14.

15.

16.

17.

18.

19.

20. 21. 22. 23.

24.

有1个人,人有2个宠物且有2部车。 人(people):姓名(pname)、年龄(page) 宠物(pet):编号(petid)、年龄(petage)、姓名(petname) 车(car):车牌号(cid)、车型(dtype)、价值(cvalue) 使用一个类里面包含其他类的对象的方法实现下列描述:(较难) 有1个房间,里面有1个冰箱,冰箱里面有1个饮料 房间有型号和大小2个属性

冰箱有型号、颜色和耗电量3个属性 饮料有类型和价值2个属性 定义抽象的Intrument(乐器)类,声明一个抽象的play();定义一个派生类Stringed(弦类乐器),实现父类的抽象的play()。在main()中实例化Stringed类调用play()。(难) 定义含有抽象方法print()的基类,在构造方法中调用print();print()方法在派生类被重写,该方法打印在派生类中定义的成员变量i,在定义i时给定非零的初始值; 在main()中,创建派生类的对象,然后调用print()。(难)

定义一个接口Myinterface,有两个抽象方法max()和min();在Operation类中实现该接口,同时实现抽象方法max()和min(),它们分别用于求任意三个整数中的最大值和最小值。(难)

定义一个Compute接口,有抽象方法add()、substract()、multiply()和divide();定义一个实现Compute接口的类Computer,然后创建Computer对象完成加、减、乘和除四个方法的调用。(难)

设计一个汽车类Auto,有速度属性speed,另外,有启动state,加速speedup和停止stop方法,然后,设计一个子类Bus表示公共汽车,Bus增加一个属性passenger表示乘客数,另外添加两个方法gotOn和gotOff表示乘客上下车。(较难)

设计一个时间类MyTime,包含一个构造方法,3个私有成员变量hour、minute、second以及它们相应的setter和getter方法,再加上一个转换成“XX时:XX分:XX秒”格式字符串的方法toString。(较易)

设计一个日期类MyDate,包含一个构造方法,3个私有成员变量year、month、day以及它们相应的setter和getter方法,再加上一个转换成“XXXX年XX月XX日” 格式字符串的方法toString。(较易)

实做一个点类Point,包含两个成员变量x,y分别表示x和y坐标,两个构建器Point()和Point(int x0,int y0),以及一个movePoint(int dx,int dy)方法实现点的位置移动。编写一个程序,创建两个Point对象p1,p2,分别调用movePoint方法后,打印p1和P2的坐标。(难)

使用ArrayList添加5个数(如:25、66、88、33、77),求出这5个数的平均数并显示在控制台。(较易)

使用Set添加5个元素(如:a,b,c,d,e),并将全部元素输出到控制台。(较易) 使用Map添加班上5个学生的学号和姓名,在控制台输出这5个学生的学号和姓名信息。(较易)

创建一个图书类Book,其属性有书号id、书名name、作者author和出版社press;再声明三个Book对象并赋值;然后依次用Set、List、Map集合来实现对Book对象数据的存储,并输出相应图书信息(难) 设计一个程序从Thread类派生,用它建立两个线程a和b,a线程每隔0.1秒输出一个字符‘a’,共输出10个‘a’,b线程每隔0.2秒输出一个字符‘b’,也输出10个‘b’。(难)

25. 请计算1~100之间的奇数之和,并实现在屏幕上每2秒钟输出一步计算结果如:(难) 1+3=4 4+5=9 ??

三、类的综合应用(共5道,抽1道,每道20分)

(一)武器问题(较难)

1.定义一个Weapon (武器)抽象类 要求:1)定义两个属性

(1) 武器的名称 name (2)武器的颜色 color

2)定义一个抽象方法showMe()

2.定义Pistol (手枪) Sword (军刀) Axe (斧头)三个具体的武器类继承Weapon 1)分别重写showMe方法,该方法功能是在控制台显示该武器的信息 注:武器的信息就包括它的名称和颜色

3.定义一个入口类Access 在main方法里面去测试功能 要求: 1) 定义一个List集合

2) 建立上面的三种武器对象各3个,给他们取名字,并且指定颜色 3) 把这些对象放在定义好的List里面

4) 循环这个List取出对象去调用武器类的showMe方法

(二)宠物问题(较难)

1.定义一个Animal(动物)抽象类 要求:1)定义两个属性

(1) 动物的名称 name (String类型) (2)动物的毛色 color (String类型) 2)定义一个抽象方法showMe()

2.分别定义Cat Dog Snake三个宠物类继承Animal

1)分别重写showMe方法,该方法功能是在控制台显示该宠物的信息 注:宠物的信息就包括它的名称和颜色

3.定义一个入口类Access 在main方法里面去测试功能 要求: 1) 定义一个List集合

2) 建立上面的三种宠物对象各3个,给他们取名字,并且指定毛色 3) 把这些对象放在定义好的List里面

4) 循环这个List取出对象去调用动物类的showMe方法

(三)家具问题(较难)

1.定义一个Furniture (家具)抽象类 要求:1)定义两个属性

(1) 家具的名称 name (String类型) (2)家具的颜色 color (String类型) 2)定义一个抽象方法showMe()

2.定义Sofa(沙发) Desk(桌子) Chair (椅子)三个具体的家具类继承Furniture 1)分别重写showMe方法,该方法功能是在控制台显示该家具的信息 注:家具的信息就包括它的名称和颜色

3.定义一个入口类Access 在main方法里面去测试功能 要求: 1) 定义一个List集合

2) 建立上面的三种家具对象各3个,给他们取名字,并且指定颜色 3) 把这些对象放在定义好的List里面

4) 循环这个List取出对象去调用家具类的showMe方法

(四)、箱子问题(难)

1.定义一个Box(箱子)类 要求:1)定义一个属性

(1) 箱子容器(用List集合表示) box 提示:用来存放物品 2.定义Apple(苹果)类 要求: 1) 定义两个属性

(1) 苹果的体积 bulk (用float数据类型) (2) 苹果的颜色 color(用String数据类型)

2) 定义一个方法public void showMe() 该方法功能是在控制台展示苹果的属性

3.在箱子类里面添加几个方法

要求: 1) 建立方法可以往箱子里面放一个苹果

public void putApple(Apple apple) 提示:直接放在List集合里面

2) 建立方法可以在箱子里面取出一个苹果 public Apple getApple()

提示:取的时候注意判断箱子里面是否还有苹果存在

3) 建立方法查看箱子里面还有多少个苹果 public int getSize()

4. 建立一个Access类 在main方法里面创建一个箱子对象和5个苹果对象测试往 箱子里面放苹果取苹果的方法

(五)、子弹发射问题(难) 1.定义一个Pistol (枪)类

要求:1)定义一个属性,弹夹 (用int表示) charger 提示:用来表示当前子弹数量 2) 定义一个方法public void shoot()

该方法的功能是在控制台打印发射两个字,但是需要判断当前弹夹里 面还有子弹没 如果没有就打印没有子弹的提示, 注意:成功发射了之后弹夹会少掉一个子弹 3) 定义一个方法用来给弹夹上子弹 public void setBullet ()

注意:调用此方法一次给弹夹上20发子弹

4) 重载上子弹方法 提供可以指定上多少数量子弹的功能

public void setBullet (int i) 注意:最多能指定30发 public int getSize()

4. 建立一个Access类 在main方法里面创建一个手枪对象测试一下上面4个方法 正确否 给手枪上子弹 发射子弹

四、JDBC操作数据库(共5道,抽1道,每道20分)

<说明!>:此题作为填空题,每道题10个空,每个空2分.黄色部分为填空。

(一)用数据库存放城市信息(难)

1.创建名为test的数据库

2.在数据库test中创建城市(City)表 字段 City _id City _name City _country City _note 描述 城市编号 城市名称 所属国家 城市简介 长度 32 30 30 200 类型 Varchar Varchar Varchar Varchar 备注 Pk(主键) 3.建立一个类来封装城市信息(City),放在com.zdsoft.po包下

提供四个私有属性: 城市编号 城市名称 所属国家 城市简介

4.建立 CityDao类,利用DBUtil类 建立方法对城市信息进行查询与删除操作 该类放在com.zdsoft.dao包下

1) 建立方法通过城市名称查询单个城市

public City findCity(String city_name)

注:查询出来的城市信息封装在Ctiy对象里

2) 能够通过Id删除某条城市信息

public void deleteCity(String city_id)

5.建立Access类在main函数中测试对城市表的查,删方法 该类放在com.zdsoft.access包下.

package com;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet;

import java.sql.SQLException; import java.sql.Statement; public class DBUtil { private Connection conn = null; // 数据库连接对象 private Statement st = null;// 执行sql语句的对象 private ResultSet rs = null;// 存放查询结果的对象

/** * 获得ResultSet * @return ResultSet */ public ResultSet getRs() { return rs; } /** * 获得数据库连接 */ private void getConnection() { final String DRIVERNAME = \ final String URL = \ final String LOGIN = \数据库管理员用户名 final String PASSWORD = \数据库密码 try { Class.forName(DRIVERNAME); // 加载驱动程序 conn = DriverManager.getConnection(URL, LOGIN, PASSWORD); } catch (Exception e) { System.out.println(\执行getConnection()方法出错:\ e.printStackTrace(); } } public DBUtil(){ getConnection(); try { st = conn.createStatement(); } catch (SQLException e) { e.printStackTrace(); } } /** * 数据库查询 * @param sql 传入的SQL语句 */

public void executeQuery(String sql){ try{ rs=st.executeQuery(sql);//执行SQL语句获得结果集 }catch(Exception e){

System.out.println(\执行executeQuery(String sql)方法出错:\我们要养成习惯如果发生了错误首先看打印出来的sql语句有没有问题 e.printStackTrace();//打印出错误原因 } } /**

* 数据库增加/删除/修改

* @param sql 传入的SQL语句 * @return >0执行成功 */

public int executeUpdate(String sql){ int ret=-1; try{ ret=st.executeUpdate(sql);//执行SQL语句对数据表进行操作,变量ret存放对表修改了多少行 }catch(Exception e){ System.out.println(\执行executeUpdate(sql)方法出错:\ e.printStackTrace();//打印出错误原因 }finally{ close(); } return ret; } /**

* 数据库关闭 */

public void close(){ try { if (rs!=null){ rs.close();//关闭结果集 } if (st!=null){ st.close();//关闭Statement对象 } if (conn!=null){ conn.close();//关闭连接 }

}catch(Exception e){ System.out.println(\执行close()方法出错:\ e.printStackTrace(); } } }

package com.zdsoft.po; public class City {

private String cityId; private String cityName; private String cityCountry; private String cityNote;

public String getCityId() { return cityId; }

public void setCityId(String cityId) { this.cityId = cityId; }

public String getCityName() { return cityName; }

public void setCityName(String cityName) { this.cityName = cityName; }

public String getCityCountry() { return cityCountry; }

public void setCityCountry(String cityCountry) { this.cityCountry = cityCountry; }

public String getCityNote() { return cityNote; }

public void setCityNote(String cityNote) { this.cityNote = cityNote; } }

package com.zdsoft.dao; import java.sql.ResultSet;

import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.DBUtil;

import com.zdsoft.po.City; public class CityDao { DBUtil db = null;

public CityDao() { db = new DBUtil(); }

public City findcity(String city_name) { String sql = \ + city_name + \ db.executeQuery(sql); ResultSet res = db.getRs(); City c = new City(); try { while (res.next()) { c.setCityId(res.getString(\ c.setCityCountry(res.getString(\ c.setCityName(res.getString(\ c.setCityNote(res.getString(\ } } catch (SQLException e) {

e.printStackTrace();

} return c; }

public void deleteCity(String city_id) { String sql = \ if (db.executeUpdate(sql) > 0) { System.out.println(\数据删除成功\ } else { System.out.println(\数据删除失败\ } } }

package com.zdsoft.access; import java.util.List;

import com.zdsoft.dao.CityDao; import com.zdsoft.po.City; public class Access { public static void main(String[] args) { CityDao dao = new CityDao(); City s = dao.findcity(\重庆\ System.out.print(s.getCityId());

}

}

System.out.print(s.getCityName()); System.out.print(s.getCityCountry()); System.out.println(s.getCityNote()); dao.deleteCity(\

(二)、用数据库存放用户信息(难)

1.创建名为test的数据库

2.在数据库test中创建用户 (User)表 字段 User _id User _name User _pass User _date 描述 用户编号 用户帐号 用户密码 创建时间 长度 32 30 30 类型 Varchar Varchar Varchar Date 备注 Pk(主键)

3.建立一个类来封装用户信息(User),放在com.zdsoft.po包下 提供四个私有属性: 用户编号 用户帐号 用户密码 创建时间

4.建立UserDao类,利用DBUtil类 建立方法对用户信息进行查询与删除操作 该类放在com.zdsoft.dao包下

1) 建立方法通过用户编号查询某个用户信息

public User findUser(String User_id)

注:查询出来的用户信息封装在User 对象里

2) 能够通过Id删除某条用户信息

public void deleteUser(String User_id)

5.建立Access类在main函数中测试对用户表的查,删方法 该类放在com.zdsoft.access包下. package com;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet;

import java.sql.SQLException; import java.sql.Statement; public class DBUtil { private Connection conn = null; // 数据库连接对象 private Statement st = null;// 执行sql语句的对象 private ResultSet rs = null;// 存放查询结果的对象 /** * 获得ResultSet * @return ResultSet

*/ public ResultSet getRs() { return rs; } /** * 获得数据库连接 */ private void getConnection() { final String DRIVERNAME = \ final String URL = \ final String LOGIN = \数据库管理员用户名 final String PASSWORD = \数据库密码 try { Class.forName(DRIVERNAME); // 加载驱动程序 conn = DriverManager.getConnection(URL, LOGIN, PASSWORD); } catch (Exception e) { System.out.println(\执行getConnection()方法出错:\ e.printStackTrace(); } } public DBUtil(){ getConnection(); try { st = conn.createStatement(); } catch (SQLException e) { e.printStackTrace(); } } /** * 数据库查询 * @param sql 传入的SQL语句 */

public void executeQuery(String sql){ try{ rs=st.executeQuery(sql);//执行SQL语句获得结果集 }catch(Exception e){ System.out.println(\执行executeQuery(String sql)方法出错:\ e.printStackTrace();//打印出错误原因 } } /**

ret=st.executeUpdate(sql);//执行SQL语句对数据表进行操作,变量ret存放对表修改了多少行

}catch(Exception e){

System.out.println(\执行executeUpdate(sql)方法出错:\+sql); e.printStackTrace();//打印出错误原因 } finally{ close(); }

return ret;

} /**

* 数据库关闭 */

public void close(){ try {

if (rs!=null){

rs.close();//关闭结果集 }

if (st!=null){

st.close();//关闭Statement对象 }

if (conn!=null){

conn.close();//关闭连接 }

}catch(Exception e){

System.out.println(\执行close()方法出错:\); e.printStackTrace(); } } }

package com.zdsoft.po;

public class Student {

private String studentId;//学生编号 private String studentName;//学生姓名 private String className;//班级名 private String studentSex;//学生性别

public String getStudentId() { return studentId; }

public void setStudentId(String studentId) { this.studentId = studentId; }

public String getStudentName() { return studentName; }

public void setStudentName(String studentName) { this.studentName = studentName; }

public String getClassName() { return className; }

public void setClassName(String className) { this.className = className; }

public String getStudentSex() { return studentSex; }

public void setStudentSex(String studentSex) { this.studentSex = studentSex; } }

package com.zdsoft.dao;

import java.sql.ResultSet;

import java.sql.SQLException; import java.util.ArrayList; import java.util.List;

import com.DBUtil;

import com.zdsoft.po.Student;

public class StudentDao { DBUtil db = null; public StudentDao() { db = new DBUtil(); } /** * 通过学生姓名查找叫这个名字的所有学生信息 *

}

* @param student_name * :学生姓名 * @return 学生信息列表 */

public List findStudents(String student_name) { List list = new ArrayList(); String sql = \ + student_name + \ db.executeQuery(sql); ResultSet res = db.getRs(); try { while (res.next()) { Student s = new Student(); s.setStudentId(res.getString(\ s.setClassName(res.getString(\ s.setStudentName(res.getString(\ s.setStudentSex(res.getString(\ list.add(s); } } catch (SQLException e) { }finally{ close();

} return list; }

/**

* 修改学生信息 *

* @param student 某一学生对象 */

public void updateStudent(Student student) { String sql = \ + \ + \ + \ if (db.executeUpdate(sql) > 0) { System.out.println(\数据修改成功\ } else { System.out.println(\数据修改失败\ } }

package com.zdsoft.access; import java.util.List;

import com.zdsoft.dao.StudentDao; import com.zdsoft.po.Student; public class Access { /** * @param args */ public static void main(String[] args) { StudentDao dao = new StudentDao(); List students = dao.findStudents(\张三\ for(Student s:students){//显示叫张三的所有学生信息 System.out.print(s.getStudentId()); System.out.print(s.getStudentName()); System.out.print(s.getClassName()); System.out.println(s.getStudentSex()); } /***************将学号为121111103学生的信息进行修改***************/ Student student = new Student(); student.setStudentId(\ student.setClassName(\开发\ student.setStudentName(\王大力\ student.setStudentSex(\男\ dao.updateStudent(student); } }

(五)用数据库存放专辑(唱片)信息(难)

1.创建名为test的数据库

2.在数据库test中创建学生(Record)表 字段 Record _id Record _name Singer _name Singer _sex 描述 专辑编号 专辑名称 歌手名称 歌手性别 长度 32 20 20 10 类型 Varchar Varchar Varchar Varchar 备注 Pk(主键)

3.建立一个类来封装专辑信息(Record),放在com.zdsoft.po包下 提供四个私有属性: 专辑编号 专辑名称 歌手名称 歌手性别

4.建立 RecordDao类,利用DBUtil类 建立方法对专辑信息进行查询与修改操作 该类放在com.zdsoft.dao包下

1) 建立方法通过歌手名称查询多个专辑

public List find Records(String student_name)

注:查询出来的专辑信息封装在Record对象里并且放在集合中 2) 能够修改专辑信息

public void updateRecord (Record record)

5.建立Access类在main函数中测试对专辑表的查,改方法 该类放在com.zdsoft.access包下.

package com;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;

public class DBUtil {

private Connection conn = null; // 数据库连接对象 private Statement st = null;// 执行sql语句的对象 private ResultSet rs = null;// 存放查询结果的对象 /**

* 获得ResultSet

* @return ResultSet */

public ResultSet getRs() { return rs; } /**

* 获得数据库连接 */

private void getConnection() {

final String DRIVERNAME = \; final String URL =

\;

final String LOGIN = \;// 数据库管理员用户名 final String PASSWORD = \;// 数据库密码 try {

Class.forName(DRIVERNAME); // 加载驱动程序

conn = DriverManager.getConnection(URL, LOGIN, PASSWORD); } catch (Exception e) {

System.out.println(\执行getConnection()方法出错:\); e.printStackTrace(); }

}

public DBUtil(){ getConnection(); try {

st = conn.createStatement(); } catch (SQLException e) { e.printStackTrace(); } } /**

* 数据库查询

* @param sql 传入的SQL语句 */

public void executeQuery(String sql){ try{

rs=st.executeQuery(sql);//执行SQL语句获得结果集 }catch(Exception e){

System.out.println(\执行executeQuery(String sql)方法出\+sql); e.printStackTrace();//打印出错误原因 }

} /**

* 数据库增加/删除/修改

* @param sql 传入的SQL语句 * @return >0执行成功 */

public int executeUpdate(String sql){ int ret=-1; try{

ret=st.executeUpdate(sql);//执行SQL语句对数据表进行操作,变量ret存放对表修改了多少行

}catch(Exception e){

System.out.println(\执行executeUpdate(sql)方法出错:\+sql); e.printStackTrace();//打印出错误原因 } finally{ db.close(); }

return ret;

} /**

* 数据库关闭 */

public void close(){ try {

if (rs!=null){

rs.close();//关闭结果集 }

if (st!=null){

st.close();//关闭Statement对象 }

if (conn!=null){

conn.close();//关闭连接 }

}catch(Exception e){

System.out.println(\执行close()方法出错:\); e.printStackTrace(); } } }

package com.zdsoft.po; public class Record {

private String recordId;//专辑编号 private String recordName;//专辑名 private String singerName;//歌手名 private String singerSex;//歌手性别 public String getRecordId() { return recordId; }

public void setRecordId(String recordId) { this.recordId = recordId; }

public String getRecordName() { return recordName; }

public void setRecordName(String recordName) { this.recordName = recordName; }

public String getSingerName() { return singerName; }

public void setSingerName(String singerName) { this.singerName = singerName; }

public String getSingerSex() { return singerSex; }

public void setSingerSex(String singerSex) { this.singerSex = singerSex; }

}

package com.zdsoft.dao; import java.sql.ResultSet;

import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.DBUtil;

import com.zdsoft.po.Student; public class RecordDao { DBUtil db = null; public RecordDao() { db = new DBUtil(); } /** * 通过歌手名查找叫他的多个专辑 * @param singer_name 歌手名 * @return 专辑信息列表 */ public List< Record > findRecords(String singer_name) { List< Record > list = new ArrayList< Record >(); String sql = \ + singer_name + \ db.executeQuery(sql); ResultSet res = db.getRs(); try { while (res.next()) { Record r = new Record(); r.setRecordId(res.getString(\ r.setRecordName(res.getString(\ r.setSingerName(res.getString(\ r.setSingerSex(res.getString(\ list.add(r); } } catch (SQLException e) {

e.printStackTrace();

} public void updateRecord (Record record) { String sql = \ + \ + \ + \ if (db.executeUpdate(sql) > 0) { System.out.println(\数据修改成功\ } else { System.out.println(\数据修改失败\ } } }

package com.zdsoft.access; import java.util.List;

import com.zdsoft.dao.RecordDao; import com.zdsoft.po.Record;

public class Access { public static void main(String[] args) { RecordDao dao = new RecordDao (); List records = dao. findRecords (\张学友\ for(Record s:records){//显示张学友的专辑 System.out.print(s.getRecordId()); System.out.print(s.getRecordName()); System.out.print(s.getSingerName()); System.out.println(s.getSingerSex()); } /***************将id为1211专辑的信息进行修改***************/ Record record = new Record(); record.setRecordId(\ record.setRcordName(\大海\ record.setSingerName(\张宇\ record.setSingerSex(\男\ dao.updateRecord(record); } }

}finally{ db.close(); }

return list;

本文来源:https://www.bwwdw.com/article/fik6.html

Top