Java程序设计教程(第2版)课后习题及答案15课后习题_第1页
Java程序设计教程(第2版)课后习题及答案15课后习题_第2页
Java程序设计教程(第2版)课后习题及答案15课后习题_第3页
Java程序设计教程(第2版)课后习题及答案15课后习题_第4页
全文预览已结束

下载本文档

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

文档简介

第15章课后习题参考答案

I.简述JDBC驱动程序的分类和各自特点。

答:JDBC定义了4种不同的驱动程序,现分述如下:

类型1:JDBC-ODBCBridge

在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的,通过JDBC-ODBC桥,

开发人员可以使用JDBC来存取ODBC数据源。不足的是,他需要在客户端安装ODBC

驱动程序,换句话说,必须安装MicrosoftWindows的某个版本。使用这一类型你需要牺

牲JDBC的平台独立性。另外,ODBC驱动程序还需要具有客户端的控制权限。

类型2:JDBC-nativedriverbridge

JDBC本地驱动程序桥提供了一种JDBC接口,它建立在本地数据库驱动程序的顶层,

而不需要使用ODBC。JDBC驱动程序将对数据库的API从标准的JDBC调用转换为本

地调用。使用此类型需要牺牲JDBC的平台独立性,还要求在客户端安装一些本地代码。

类型3:JDBC-networkbridge

JDBC网络桥驱动程序不再需要客户端数据库驱动程序。它使用网络上的中间服务器来

存取数据库。这种应用使得以下技术的实现有了可能,这些技术包括负载均衡、连接缓

冲池和数据缓存等。由于第3种类型往往只需要相对更少的下载时间,具有平台独立性,

而且不需要在客户端安装并取得控制权,所以很适合于Internet上的应用。

类型4:PureJavadriver

第4种类型通过使用一个纯Java数据库驱动程序来执行数据库的直接访问。此类型实际

上在客户端实现了2层结构。要在N-层结构中应用,一个更好的做法是编写一个EJB,

让它包含存取代码并提供一个对客户端具有数据库独立性的服务。

2.说明数据源的作用。

答:数据源是一种用来提高数据库连接性能的常规手段,数据源会负责维持一个数据库

连接池,当程序创建数据源实例时,系统会一次性地创建多个数据库连接,并把这些数

据库连接保存在连接池中。当程序需要进行数据库访问时,无须重新获得数据库连接,

而是从连接池中取出一个空闲的数据库连接,当程序使用数据库连接访问结束后,无须

关闭数据库连接,而是将数据库连接归还给连接池即可。通过这种方式就可比避免频繁

地获取数据库连接,关闭数据库连接所导致的性能下降。

3.ResuliSel类常量有哪些?各有什么意义。

答:ResultSet中的几个静态常量:

TYPE_FORWARD_ONLY=1003

TYPE_SCROLL_INSENSITIVE=1004

TYPE_SCROLL_SENSITIVE=I005

CONCUR_READ_ONLY=1007

CONCUR_UPDATABLE=1008

这几个常量常用于这两个方法:

createStatement(ResultSet.TYPE_SCROLL」NSENSITIVE.ResultSet.CONCUR_READ_ON

LY);

prepareStatement(Stringsql,intresultSetType,intresultSetConcurrency);

296

这两个方法都属于java.sql.Cormeclion

在实际开发中,我们可以利用这些参数来方便地移动指针。

4.什么是数据库元数据?有什么用途?

答:按照传统的定义,元数据(Metadaia)是关于数据的数据。

在数据库系统中,元数据可以帮助数据库管理员和数据库的开发人员非常方便地找到他

们所关心的数据;元数据是描述数据库内数据的结构和建立方法的数据,可将其按用途

的不同分为两类:技术元数据(TechnicalMetadata)和业务元数据(BusinessMetadata)o

5.如何提高数据库存取效率?有哪些技术?

答:a.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及

的列上建立索引。

b.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引

而进行全表扫描,如:selectidfromtwherenumisnull可以在num上设置默认值0,确

保表中num歹ij没有null值,然后这样查询:selectidfromtwherenum=0

c.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有

大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各

一半,那么即使在sex上建了索引也对查询效率起不了作用。

d.索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了

insert及update的效率,因为insert或update时有可能会重建索引,所以怎样建索引

需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑

一些不常使用到的列上建的索引是否有必要。

c.应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,

一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需

要频繁更新索引数据列,那么需要考虑是否应将该索引建为索引。

6.简述什么是编译预处理。举例说明其使用方法。

答:PrcparcdStatcmcnt始于编译预处理有关的类,是Statement的一个子类,它与Statement

类的一个重要区别是:用Statement定义的语句是一个功能明确而具体的语句,而用

PraparedStatement类定义的SQL语句中则包含一个或者多个?占位符,他们对应多个

1N参数,带占位符的SQL语句可以被编译,而在后续执行过程中,这些占位符需要使

用set方法设置为具体的IN参数值,再将这些语句发送到数据库获得执行。

给出若干编译预处理语句实例说明PreparedStatement的用法

(I)创建对象

PraparcdStatementpstmt=conn.prapareStatement("updatetahlelset=?wherey=?");

1

对象pstmt中包含了语句"updatetablelsetx=?where尸?",咳语句被发送到DBMS进行编

译预处理,为执行做准备

(2)为每个IN参数设定参数值,即每个占位符?对应一个参数值。设定参数值是通过调

用setXxx方法实现的,其中Xxx是与参数相对应的类型,加入上面例子中的参数类型为

long,则用下面的代码为参数设定值。

pstmt.setLong(1,123456789);

pslmt.se(Long(2,987654321);

1

2

这里的1,2是与占位符从左到有的次序相对应的序号,他们不是从0开始计数。

(3)执行语句

Pstnit.executeUpdate();

1

7.什么是保存点?

答:开启事务后在执行语句后面打几个点,我们调用rollback语句就会回滚到指定的点。

而不是回到事务执行之前的样子。

8.什么是事务?事务有哪些特点?

答:指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级

数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并

用形如begintransaction和endtransaction语句(或函数调用)来界定。事务由事务开始

(begintransaction)和事务结束(endtransaction)^间执行的全体操作组成。

事务应该具有4个属性;原子性、一致性、隔离性、持:久性。这四个属性通常称为ACID

特性。

原子性(alomicily)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,

要么都不做。

一致性(consistency)。事务必须是使数据库从•个•致性状态变到另一个一致性状态。

一致性与原子性是密切相关的。

隔离性(isolation)o一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使

用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability)o持久性也称永久性(pcnnanence),指一个事务一旦提交,它对数

据库中数据的改变就应该是永久性的。接下来的具他操作或故障不应该对具有任何影响。

9.项目练习:建一数据库,输入多于20()条记录。然后编程浏览数据。

要求:(1)用表显示数据。

(2)要求分页显示。每页设置翻页的按钮,使能翻到上一页、下一页、第一页、

最后一页,并显示总页数和当前页页号。

答:

importjava.sql.Connection;

importjava.sql.DriverManager:

importjava.sql.PrcparcdStatcmcnt;

importjava.sql.SQLException;

publicclassInscriRecords{

privateConnectionconnect(){

//SQLiteconnectionstring

Stringurl="jdbc:sqlite:D:/software/sqlite/java-sqlite.db";

Connectionconn=null;

try{

conn=DriverManager.getConnection(url);

}catch(SQLExceptione){

Systeni.out.println(e.getMessage());

)

returnconn;

}

publicvoidinscrt(Stringname,doublecapacity){

Stringsql="INSERTINTOeinployees(name,capacity)VALUES(?,?)";

try(

Connectionconn=this.connect();

PreparedStatementpstmt=conn.prepareStatement(sql);

pstmt.setString(l,name);

pstrnt.setDouble(2,capacity);

pstmt.executeUpdateO;

}catch

温馨提示

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

评论

0/150

提交评论