楼主: lastwinner

[转载] JAVA应用程序设计开发

[复制链接]
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
81#
 楼主| 发表于 2006-6-29 20:58 | 只看该作者
  15.7 豆的打包和使用
  15.7.1 豆的打包
  豆中的各个类将被打包成jar文件,以备流通和使用。

  jar文件包含几个zip格式的文件(.class文件,gif文件等),以及一个mainfest.mf文件,描述jar文件的内容。

  为了把豆的若干个文件打包并放在BDK的合适目录下,我们需要利用JDK1.1提供的打包/解包工具jar.exe。由于这是一个较为复杂的过程,所以我们推荐使用微软的nmake工具来辅助(适用于Win95/NT平台)。

  nmake.exe可以从许多微软的开发工具中得到。如VC++的bin目录下就有这个工具。

  nmake需要与一个.mk文件配合使用,下面我们结合例子说明这一过程。

  设BDK安装在c:\bdk目录下,找到demo子目录。我们的WhirlButton豆的所有文件就存放在demo\mybeans\whirlbutton目录下。编写如下的.mk文件(例15.6),然后在demo目录下做:

  c:\bdk\demo\nmake -f whirlbutton.mk

会生成jar文件,该文件名为whirbutton.jar,存放在\beans\jars目录下。注意应事先指明nmake和jar的路径,以免搜寻不到,如:

  set path=\jdk1.1.1\bin;\msdev\bin

  例5.6 whirlbutton.mk。

  1:

  2: CLASSFILES=\

  3: mybeans\whirlbutton\WhirlButton.class\

  4: mybeans\whirlbutton\WhirlButtonBeanInfo.class\

  5: mybeans\whirlbutton\WhirlButtonCustomizer.class

  6:

  7: DATAFILES=\

  8: mybeans\whirlbutton\WhirlButtonIcon.gif

  9:

  10: JARFILE=..\jars\WhirlButton.jar

  11:

  12: all:$(JARFILE)

  13:

  14: #Create a JAR file with a suitable manifest.

  15:

  16: $(JARFILE):$(CLASSFILES)$(DATAFILES)

  17: jar cfm $(JARFILE) <<manifest.tmp mybeans\whirlbutton\*.class $(DATAFILES)

  18: Name:mybeans/whirlbutton/WhirlButton.class

  19: Java-Bean:True

  20: <<

  21:

  22: SUFFIXES:.java.class

  23:

  24: {mybeans\whirlbutton}.java{mybeans\whirlbutton}.class:

  25: set CLASSPATH=.

  26: javac $<

  27:

  28:clean:

  29: -del mybeans\whirlbutton\*.class

  30: -del $(JARFILE)

  对于.mk文件的编写,并非我们研究的范畴,不过这里大致地说明一下。

  例15.6中,第1~5行说明豆中有哪些类,注意第2~4行末尾的“\”不可少。第7~8行指明.gif文件路径,第10行是最后生成的jar文件的路径。从第12~26行是生成.jar文件的过程。这样生成的.jar文件已自动包括了与其内容相应的.mf文件(例15.7)。读者应注意第18行。指明Name时,路径中的斜线方向与别的地方不同。不要忽视这个小问题,它有可能造成装入豆的失败。另外,各个文件名的大小写也很关键,必须与原文件名的大小写完全相符。

  例15.7 WhirlButton中的manifest.mf文件(略)

  ~~~~~~~

  ~~~~~~~

  例15.6中的.mk文件在编写其他豆时可以套用,只要改变相应的路径及类名信息即可。下面再给出OvalDemo.mk(例15.8),供读者参考。

  例15.8 OvalDemo.mk(略)

  ~~~~~~~

  ~~~~~~~

  生成了jar文件之后,就可以转换到beanbox目录,用“run”来运行。BDK会自动把\bdk\jars目录下的所有豆加入ToolBox中。另一种办法是用“run”启动BDK后,用BeanBox的File|Loadjar...菜单项装入.jar文件。这个方法不要求.jar文件的路径一定是\bdk\jars。

  本节所述适用于win32平台,在Unix系统下,要用gnumake来代替nmake,相应地.mk文件也要用.gmk文件代替,这里就不详细介绍了。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
82#
 楼主| 发表于 2006-6-29 20:58 | 只看该作者
  15.7.2 豆在程序中的使用
  使用豆的方法与开发人员所使用的创建工具有关。创建工具可能会提供可视化操作与文本编辑相结合的形式来组装和使用豆。在没有这类创建工具的情况下,也可以在完全手写的程序中应用它们。下面介绍后一种情况。了解了这种最“低级”的处理方法后,对各种创建工具中豆的使用也就不难理解了。

  在手工编写的程序中,应用豆大致需要经过下列步骤:

  ⑴用jar命令将.jar文件解开,放在JDK可以搜索到的class路径下。解开.jar文件可以用

  jar xf <filename>.jar

命令。

  ⑵把得到的.class文件像类库一样使用。

  比如,下面的小程序把一个OurButton与一个JellyBean组装在一起,形成一个Applet(例15.9)。

  例15.9 MyApplet.java。

  1: import java.awt.event.*;

  2: import java.awt.*;

  3: import java.applet.*;

  4: import sunw.demo.jelly.*;

  5: import sunw.demo.buttons.*;

  6: public class MyApplet extends Applet implements ActionListener{

  7: private OurButton btn;

  8: private jellyBean dot;

  9: private int state;

  10: public void init(){

  11: btn = new OurButton("Bean Button";

  12: add("south",btn);

  13: dot = new JellyBean();

  14: add("Center",dot);

  //登记监听者

  15: btn.addActionListener(this);

  16: state = 1;

  17: }

  //处理按钮事件

  18: public void actionPerformed(ActionEvent e){

  19: if(state==1){

  //调用JellyBean的方法

  20: dot.setColor(Color.blue);

  21: state = 0;

  22: }else{

  23: dot.setColor(Color.red);

  24: state = 1;

  25: }

  26: }

  27: }

  可见这个例子中,MyApplet类本身充当了15.2中提到的“适配器”的角色。这个程序使窗口中出现一个“Bean Button”按钮和JellyBean图像。按一次按钮,就把JellyBean变成蓝色;再按一次,变为红色,此后在蓝色与红色间转换。MyApplet接收到按钮被按的事件后,调用JellyBean的setColor()方法作出反应。读者可以编写类似的应用程序,在其中使用Java豆。

  本章小结
  本章介绍了Java豆的概念、类库和开发的基本方法,并给出了示例。有兴趣的读者还可以参考Java豆应用接口的说明书和其它资料,以期对这个新的重要概念、类库和方法有更深的认识和了解。Java豆相对于一般的Java程序有其特殊性,读者在实践中要注意安排好对事件互动关系的处理和对属性访问的控制。为了能在创建工具中对它进行操纵,还需要考虑它的定制方法以及与创建工具之间的协调。Java豆作为一种可复用的软件组件模型,仍在不断发展变化之中,必然会日趋完善并在软件生产中发挥更大的作用。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
83#
 楼主| 发表于 2006-6-30 17:34 | 只看该作者
第十六章 JDBC编程 
  JDBC(Java data Base Connectivity)是Java语言为了支持SQL功能而提供的与数据库相联的用户接口,JDBC中包括了一组由Java语言书写的接口和类,它们都是独立于特定的DBMS,或者说它们可以和各种数据相关联。有了JDBC以后,程序员可以方便地在Java语言中使用SQL语言,从而使Java应用程序或Java applet可以实现对分布在网络上的各种关系数据库的访问。使用了JDBC以后,程序员可以将精力集中于上层的功能实现,而不必关心底层与具体的DBMS的连接和访问过程。


16.1 SQL简介
  JDBC最重要的功能是允许用户在Java程序中嵌入SQL语句,以实现对关系数据库的访问。本节中我们将介绍一些有关关系数据库的基本概念,并简单介绍SQL语言。

16.1.1 关系数据库简介
  关系数据库系统的思想是由IBM公司的E.F.Codd于1970年率先提出的。

  关系数据库支持的数据模型是关系模型。关系模型的基本条件是其关系模式中每个属性值必须是一个不可分割的数据量。简单地说,在关系数据库中数据结构一般是张两维表,这张两维表的每一列的值必须是不可分割的数据项,而任两行应互不相同。

  关系模型的主要特点是:

  ⑴结构简单,表示力强,易于掌握。

  ⑵语言一体化,非过程化的操作,方便用户使用。

  ⑶有一定的数学理论作基础,利于进一步研究和发展。

  ⑷操作耗时,执行效率低。

  关系数据库管理系统一般向用户提供数据检索、数据插入、数据删除、数据修改四种基本操作功能。

  有关数据库的其它知识,若有需要,读者可以自己查阅相关书籍。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
84#
 楼主| 发表于 2006-6-30 17:34 | 只看该作者
16.1.2 SQL语言简介
  SYSTEM R是IBM公司的San Jose实验室研制的一个非常著名的关系数据库管理系统,SQL就是它所提供的数据库语言。SQL语言具有数据定义,数据操纵以及控制等功能。经过人们不断努力完善,1986年SQL语言被确定为关系数据库语言的国际标准。

  SQL语言有两种使用方式:通过联机交互方式由终端用户作为语言使用,或作为子语言嵌入主语言中使用。JDBC允许用户在Java程序中嵌入SQL语言。

  下面我们对SQL语言的各项功能进行简单介绍。

  一、数据定义功能

  主要包括定义基表、定义索引和定义视图三个部分。

  1、基表的定义

  ⑴创建基表

  用此语言可以定义基表,包括定义表名、域名、域类型及其它内容,形式如下:

  CREATE TABLE (表名) (<域定义>[,<域定义>]...)[IN SEGMENT <段名>]

其中域定义形式如下:

  <域名>(<数据类型>[,NONULL])

  上面的定义中段名部分都可以不出现(缺省时表示指的是私有段)。NONULL出现时表示不允许空值出现。

  例 我们可以创建一个表testTable,包括域id和name,创建方法如下:

  CREATE TABLE testTable(id (Integer),name(Char 10))

  ⑵扩充基表

  用它可在已有的基表中增添新的域。形式:

  EXPEND TABLE <基表名> ADD FIELD (<定义域>

  例 在testTable中增加一个域age,方法如下

  EXPEND TABLE testTable ADD FIELD (age (INTEGER))

  ⑶取消基表

  用此语句可以取消指定的表。基本形式如下:

  DROP TABLE <表名>

  例 DROP TABLE testTable

  将表testTable删除。

  2、建立索引、取消索引

  为了提供多种存取路径和一定条件下的快速存取,我们可以对基表建立若干索引。建立索引和取消索引的语句形式如下。

  ⑴建立索引

  CREATE [UNIQUE] INDEX <索引名> ON <表名> ([<域名>[<顺序>]][,<域名>[<顺序>]]...)

  其中若出现UNIQUE表示不允许两个元组在给定索引中有相同的值。<顺序>若为ASC表升序,为DESC为降序,缺省时为ASC。

  例 CREAGE INDEX X ON testTable (id)

  就表示在表testTable上建立一个按id升序排列的索引X。

  ⑵取消索引

  DROP INDEX <索引名>

  3、视图的定义

  ⑴创建视图

  CREATE VIEW 视图名[(字段名[,字段名]...)] AS 子查询

  ⑵取消视图

  DROP VIEW 视图名

  二、数据操纵功能

  主要包括Select语句、Insert语句、Delect语句和Update语句。

  ⑴Select语句

  SQL中SELECT语句可以对数据库实现基本的查询功能。基本形式如下:

  SELECT <[DISTINCT]<选择项>>|* FROM <表名>[,<表名>] [WHERE <条件>] [<GROUP BY 子句>[<Having子句>]] [<Order BY 子句>]

  GROUP BY子句映象中所得的元组集合按指定域分组,Having子句对GROUP BY设置一些逻辑条件。Order BY子句给出检索结构的顺序。

  SQL还有一些简单的统计功能

  ①COUNT集合元素个数的统计;

  ②SUM集合元素的和;

  ③MAX(MIN):集合中的最大(最小)元素;

  ④AVG:集合元素的平均值。

此外SQL语言允许对多个数据库进行连接查询。下面我们举一个关于SELECT的简单例子。

  例 对testTable进行检索,查询id=3的成员的name

  SELECT name

  FROM testTable

  WHERE id=3

有关SELECT语句其它功能的使用,请读者自行查阅相关书籍。

  ⑵INSERT语句

  用户使用INSERT语句可以实现对数据库增加记录的功能。

  INSERT INTO <表名>[(字段名[,字段名]...)] VALUES (常量[,常量]...)

  例 在testTalbe中插入id=6,name="Xu"的一条记录

  INSERT INTO testTable(id,name) VALUES(6,'XU')

  ⑶DELETE语句

  用户使用DELETE语句可以实现对数据库的基本删除功能。

  例 在testTable中删除id=3的记录

  DELETE FROM testTable WHERE id=3

  ⑷UPDATE语句

  使用UPDATE语句可以实现对数据库的基本修改功能。基本形式如下:

  UPDATE <表名> SET 字段=表达式[,字段=表达式]...WHERE <条件>

  例 将表testTable中id=3的记录中name项尾部增加字符s

  UPDATE testTable

  SET name=name+'s'

  WHERE id=3

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
85#
 楼主| 发表于 2006-6-30 17:34 | 只看该作者
16.2 JDBC概述
  Java语言具有的健壮性、安全性、可移植性、易理解性及自动下载等特点,使它成为一种适用于数据库应用极好的基本语言。在此基础上建立的JDBC,为独立于数据库管理系统DBMS的应用提供了能与多个不同数据库连接的通用接口。

  JDBC由一组Java语言编写的类和接口组成,使用内嵌式的SQL,主要实现三方面的功能:建立与数据库的连接,执行SQL声明以及处理SQL执行结果。JDBC支持基本的SQL功能,使用它可方便地与不同的关系型数据库建立连接,进行相关操作,并无需再为不同的DBMS分别编写程序。下面我们先介绍JDBC与SQL及ODBC的关系,再介绍JDBC支持的两种模型,最后介绍JDBC的抽象接口和数据库驱动器Driver。

16.2.1 JDBC与SQL
  前一节中我们已经介绍过,SQL语言是关系型数据的标准操作语言。JDBC建立在SQL声明的基础上,从而在不同的数据库功能模块的层次上提供了一个统一的用户接口。JDBC是一个较低层的API接口,也就是说它直接执行SQL声明和取回执行结果,它是更高层次API的基础。高层的API,具有更为友善的用户界面,而将执行转交给JDBC这样的低层接口完成。

  尽管一般数据库系统在很大范围内支持SQL的语义语法,但它们在复杂的高层次功能如存储功能调用和外部连接等方面往往不尽一致。为了解决这一矛盾,JDBC采用以下的几种措施:

  (1)JDBC允许使用从属于DBMS的系统的任何询问语句,这些询问语句都将被传送给后台的DBMS实际执行。这样增加了使用的灵活性,一个应用程序的询问可以不是SQL形式的,而是SQL的特定引出形式,如为特定的DBMS提供的文件或图片查询。这样做的风险则在某些DBMS中可以会出现错误。

  (2)一般认为ANSI SQL Entry Level的功能比较完备,而且是被广泛支持的。因此为了使JDBC与SQL一致,要求用户使用至少ANSI SQL 92 Entry Level以上的版本,这样就给那些要求广泛的可携带性的应用程序提供了共同命名的保证。

  (3)对较复杂的应用,JDBC提供了接口类DatabaseMetadata,用户可通过这个类获取相应DBMS的描述信息,再根据所得信息采取特定的查询操作方式。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
86#
 楼主| 发表于 2006-6-30 17:35 | 只看该作者
16.2.2 JDBC与ODBC
  Microsoft的ODBC(Open DataBase Connectivity)是当前与关系型数据库连接最常用的接口。JDBC是建立在ODBC的基础上的,实际上可视为ODBD的Java语言翻译形式。当然两者都是建立在X/Open SQL CLI(Call Level Interface)的抽象定义之上的。而JDBC与ODBC相比,在使用上更为方便。

  既然ODBC已经是成型的通用接口,我们可在Java程序中直接使用ODBC却要建立JDBC接口,这样做的原因和好处包括以下几点:

  (1)ODBC使用的是C语言界面,而从Java直接调用C源码容易在安全性、健壮性和可移植性等方面产生问题,运行功效也受到影响。

  (2)将ODBC的C语言API逐字译为Java也并不理想。比如,Java没有指针,ODBC的一种面向对象式的翻译界面,对Java的程序员来说更为自然方便。

  (3)ODBC难于学习掌握,经常将简单的特性与复杂的特性混合使用。而JDBC相对简单明了许多,容易理解掌握。

  (4)JDBC有助于实现“纯Java“的方案。当使用ODBC时,每一台客户机都要求装入ODBC的驱动器和管理器。而当使用JDBC,驱动器完全由Java语言编写时,JDBC代码可以在所有的Java平台上自动装入、移植,而且是安全的。

  当然,在JDBC也可以使用ODBC,但是要通过中介JDBC-ODBC Bridge使用。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
87#
 楼主| 发表于 2006-6-30 17:35 | 只看该作者
16.2.3 JDBC支持的两种模型
  在与数据库的连接操作中,JDBC支持两种不同的模型。这两川模型根据用户与数据库的关系层次不同,分别称为两模型和三层模型。

   两层模型中,Java的应用程序(Applet或Application)直接与数据库联系。用户的SQL声明被提交给数据库,执行的结果回送给用户,如图16.1所示。这种模型具有客户机/服务器结构,用户的机器如同客户机,存放数据库的机器则如同服务器,连接两者的可以是局域网,也可以是广域网。

  ┌─────────┐
  │Java Application│
  │ Java Applet  │ Clinet Machine
  ├─────────┤
  │  JDBC   │
  └─────────┘
      ↑
      ↓
  ┌─────────┐
  │  DBMS   │ Database Serve
  └─────────┘
  图16.1 JDBC支持的两层模型

  在三层模型中,用户不直接与数据库联系。用户的命令首先发送给一个所谓“中间层”,中间层再将SQL声明发给DMBS。执行的结果也同样由中间层转交,如图16.2所示。三层模型的好处是,可以通过中间层保持对存取权限和公有数据允许修改类型的控制,便于安全管理。同时,用户可以使用一种较为友善的高层API,由中间层转化为恰当的低层命令,保证较好地运行功效。到目前为止,中间层多用C或C++语言编写。随着Java语言的逐步推广,将出现用Java编写的中间层,更好地利用它的健壮性、多线程,安全性等特点。

  ┌──────────┐
  │ Java Applet   │
  │ HTML Browse   │
  └──────────┘
      ↑
      ↓
  ┌──────────┐
  │Application Server │
  │  (Java)    │
  ├──────────┤
  │  JDBC    │
  └──────────┘
      ↑
      ↓
  ┌──────────┐
  │  DBMS    │
  └──────────┘
  图16.2 JDBC支持的三层模型

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
88#
 楼主| 发表于 2006-6-30 17:35 | 只看该作者
16.2.4 JDBC的抽象接口
  JDBC中最重要的部分是定义了一系列的抽象接口,通过这些接口,JDBC实现了三个基本的功能:建立与数据的连接、执行SQL声明和处理执行结果。主要的接口和功能实现关系如图16.3所示。

  这些接口都存在Java的sql包中,它们的名称和基本功能是:

  *java.sql.DriverMagnager

  管理驱动器,支持驱动器与数据连接的创建。

  *java.sql.Connection

  代表与某一数据库的连接,支持SQL声明的创建。

  *java.sql.Statement

  在连接中执行一静态的SQL声明并取得执行结果。

  *java.sql.PreparedStatement

  Statement的子类,代表预编译的SQL声明。

  *java.sql.CallableStatement

  Statement的子类,代表SQL的存储过程。

  java.sql.ResultSet

  代表执行SQL声明后产生的数据结果。

  在下一节中,我们将对这些接口加以详细的介绍。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
89#
 楼主| 发表于 2006-6-30 17:35 | 只看该作者
16.2.5 JDBC的数据库驱动器Driver
  Java的应用程序员通过sql包中定义的一系列抽象类对数据库进行操作,而实现这些抽象类,实际完成操作,则是由数据库驱动器Driver运行的。它们之间的层次关系如图16.4所示

┌─────────┐
│Java Application │
└─────────┘
JDBC API ————————
┌─────────┐
│JDBC Manager   │
└─────────┘
——————————————
    ┌───────┐┌───────┐┌──────┐┌─────────┐
DJBC  │  JDBC-Net ││JDBC-ODBC  │ │Native-API ││Native-Protocol │
Drivers│   Driver  ││Bridge Driver││Driver   │ │Driver      │
    └───────┘└───────┘└──────┘└─────────┘
        ↓        ↓        ↓        ↓
  ┌───────────────────────────────────┐
  │                 D B M S               |
  └───────────────────────────────────┘
            图16.4 JDBC Drivers

  JDBC的Driver可分为以下四种类型:

  (1)JDBC-ODBC Bridge和ODBC Driver

  这种驱动器器通过ODBC驱动器提供数据库连接。使用这种驱动器,要求每一台客户机都装入ODBC的驱动器。

  (2)Native-API partly-Java Driver

  这种驱动器将JDBC指令转化成所连接使用的DBMS的操作形式。各客户机使用的数据库可能是Oracle,可能是Sybase,也可能是Access,都需要在客户机上装有相应DBMS的驱动程序。

  (3)JDBC-Net All-Java Driver

  这种驱动器将JDBC指令转化成独立于DBMS的网络协议形式,再由服务器转化为特定DBMS的协议形式。有关DBMS的协议由各数据库厂商决定。这种驱动器可以联接到不同的数据库上,最为灵活。目前一些厂商已经开始添加JDBC的这种驱动器到他们已有的数据库中介产品中。要注意的是,为了支持广域网存取,需要增加有关安全性的措施,如防火墙等等。

  (4)Native-protocol All-Java Driver

  这种驱动器将JDBC指令转化成网络协议后不再转换,由DBMS直接使用。相当于客户机直接与服务器联系,对局域网适用。

  在这四种驱动器中,后两类“纯Java”(All-Java)的驱动器效率更高,也更具有通用性。但目前第一、第二类驱动器比较容易获得,使用也较普遍。本书中的例程就都是用JDBC-ODBC Bridge驱动器完成。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
90#
 楼主| 发表于 2006-6-30 17:35 | 只看该作者
16.3 JDBC编程
  本节我们将对JDBC编程进行具体的介绍。本节的程序中使用JDBC驱动器均为JDBC-ODBC Bridge,使用的数据库为ACCESS数据库。

16.3.1 程序基本结构
  一般的JDBC程序都完成三项功能:与数据库建立连接;传送SQL 声明以及对返回结果进行处理。下面我们通过一个具体例子说明这三项功能的实现过程。

  例16.1 Creage.java给出了一个简单的JDBC程序,此程序执行后创建一张名为testTable的表,表中包括两个域,域名分别为id和name。

  例16.1 Create.java及程序说明。

1: import java.net.URL;
2: import java.sql.*;
3:
4: class Create{
5: public static void main (String[] args){
6: String url="jdbcdbc:demo";
7: String query="CREATE TABLE testTable" + "(id INT,name CHAR(10))";
8:
9: try{
10: //下载jdbc-odbc bridge 驱动器
11: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver";//关于此句参见下面Cyclone的注释
  //与驱动器建立连接
14: Connection con=DriverManager.getConnection(url,"user","password";
15:
16: //创建一个Statement对象
17: Statement stmt=con.createStatement();
18:
19: //执行SQL声明
20: stmt.executeUpdate(query);
21: System.out.println("Create successfully!";
22:
23: //关闭 stm
24: stmt.close();
25:
26: //关闭连接
27: con.close();
28: }catch(SQLException ex){
  //SQL异常信息
29:System.out.println("\n***SQLException caught ***\n";
30: while(ex!=null){
31:  System.out.println("SQLState:"+ex.getSQLState());
32:  System.out.println("Message:"+ex.getMessage());
33:  System.out.println("Vendor:"+ex.getErrorCode());
34:  ex=ex.getNextException();
35:  System.out.println("";
  }
36:}catch(java.lang.Exception ex){
37:ex.printStackTrace();
38:}
39:}
40:}
41:

  [Cyclone注:我编译本例用的是VJ++6.0,操作系统是Win98(2版),编译通过,但执行程序后报告“No suitable driver”,我判断出错原因是Win98与sun.jdbc.odbc.JdbcOdbcDriver没有协调好。此后,笔者把第11句换为:Class.forName("com.ms.jdbc.odbc.JdbcOdbcDriver";再编译运行通过。]


------------------------------

------------------------------

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表