jdbc说明与用途.docx

上传人:b****5 文档编号:7433328 上传时间:2023-01-23 格式:DOCX 页数:38 大小:51.07KB
下载 相关 举报
jdbc说明与用途.docx_第1页
第1页 / 共38页
jdbc说明与用途.docx_第2页
第2页 / 共38页
jdbc说明与用途.docx_第3页
第3页 / 共38页
jdbc说明与用途.docx_第4页
第4页 / 共38页
jdbc说明与用途.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

jdbc说明与用途.docx

《jdbc说明与用途.docx》由会员分享,可在线阅读,更多相关《jdbc说明与用途.docx(38页珍藏版)》请在冰豆网上搜索。

jdbc说明与用途.docx

jdbc说明与用途

 JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

     有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。

换言之,有了JDBCAPI,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBCAPI写一个程序就够了,它可向相应数据库发送SQL调用,将Java语言和JDBC结合起来使程序员只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次

     Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。

JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。

作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。

JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。

JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。

  JDBCTM是一种用于执行SQL语句的JavaTMAPI,它由一组用Java编程语言编写的类和接口组成。

JDBC为工具/数据库开发人员提供了一个标准的API,使他们能够用纯JavaAPI来编写数据库应用程序。

  有了JDBC,向各种关系数据库发送SQL语句就是一件很容易的事。

换言之,有了JDBCAPI,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,为访问Informix数据库又写另一个程序,等等。

您只需用JDBCAPI写一个程序就够了它可向相应数据库发送SQL语句。

而且,使用Java编程语言编写的应用程序,就无须去忧虑要为不同的平台编写不同的应用程序。

将Java和JDBC结合起来将使程序员只须写一遍程序就可让它在任何平台上运行。

  Java具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。

所需要的只是Java应用程序与各种不同数据库之间进行对话的方法。

而JDBC正是作为此种用途的机制。

  JDBC扩展了Java的功能。

例如,用Java和JDBCAPI可以发布含有applet的网页,而该applet使用的信息可能来自远程数据库企业也可以用JDBC通过Intranet将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有Windows、Macintosh和UNIX等各种不同的操作系统)。

随着越来越多的程序员开始使用Java编程语言,对从Java中便捷地访问数据库的要求也在日益增加。

  MIS管理员们都喜欢Java和JDBC的结合,因为它使信息传播变得容易和经济。

企业可继续使用它们安装好的数据库,并能便捷地存取信息,即使这些信息是储存在不同数据库管理系统上。

新程序的开发期很短。

安装和版本控制将大为简化。

程序员可只编写一遍应用程序或只更新一次,然后将它放到服务器上,随后任何人就都可得到最新版本的应用程序。

对于商务上的销售信息服务,Java和JDBC可为外部客户提供获取信息更新的更好方法。

一、JDBC的用途

  简单地说,JDBC可做三件事:

与数据库建立连接、发送SQL语句并处理结果。

下列代码段给出了以上三步的基本示例:

Connectioncon=DriverManager.getConnection("jdbc:

odbc:

wombat","login",

"password");

Statementstmt=con.createStatement();

ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable1");

while(rs.next()){

intx=rs.getInt("a");

Strings=rs.getString("b");

floatf=rs.getFloat("c");

}

  上述代码对基于JDBC的数据库访问做了经典的总结,当然,在本小节的后续部分会对它做详尽的分析讲解。

二、JDBCAPI

  JDBC是个"低级"接口,也就是说,它用于直接调用SQL命令。

在这方面它的功能极佳,并比其它的数据库连接API易于使用,但它同时也被设计为一种基础接口,在它之上可以建立高级接口和工具。

高级接口是"对用户友好的"接口,它使用的是一种更易理解和更为方便的API,这种API在幕后被转换为诸如JDBC这样的低级接口。

  在关系数据库的"对象/关系"映射中,表中的每行对应于类的一个实例,而每列的值对应于该实例的一个属性。

于是,程序员可直接对Java对象进行操作;存取数据所需的SQL调用将在"掩盖下"自动生成。

此外还可提供更复杂的映射,例如将多个表中的行结合进一个Java类中。

  随着人们对JDBC的兴趣日益增涨,越来越多的开发人员一直在使用基于JDBC的工具,以使程序的编写更加容易。

程序员也一直在编写力图使最终用户对数据库的访问变得更为简单的应用程序。

例如应用程序可提供一个选择数据库任务的菜单。

任务被选定后,应用程序将给出提示及空白供填写执行选定任务所需的信息。

所需信息输入应用程序将自动调用所需的SQL命令。

在这样一种程序的协助下,即使用户根本不懂SQL的语法,也可以执行数据库任务。

三、JDBC与ODBC和其它API的比较

  目前,Microsoft的ODBCAPI可能是使用最广的、用于访问关系数据库的编程接口。

它能在几乎所有平台上连接几乎所有的数据库。

为什么Java不使用ODBC?

对这个问题的回答是:

Java可以使用ODBC,但最好是在JDBC的帮助下以JDBC-ODBC桥的形式使用,这一点我们稍后再说。

现在的问题已变成:

"为什么需要JDBC"?

答案是显然的:

ODBC不适合直接在Java中使用,因为它使用C语言接口。

从Java调用本地C代码在安全性、实现、坚固性和程序的自动移植性方面都有许多缺点。

从ODBCCAPI到JavaAPI的字面翻译是不可取的。

例如,Java没有指针,而ODBC却对指针用得很广泛(包括很容易出错的指针"void*")。

您可以将JDBC想象成被转换为面向对象接口的ODBC,而面向对象的接口对Java程序员来说较易于接收。

  ODBC很难学。

它把简单和高级功能混在一起,而且即使对于简单的查询,其选项也极为复杂。

相反,JDBC尽量保证简单功能的简便性,而同时在必要时允许使用高级功能。

启用"纯Java"机制需要象JDBC这样的JavaAPI。

如果使用ODBC,就必须手动地将ODBC驱动程序管理器和驱动程序安装在每台客户机上。

如果完全用Java编写JDBC驱动程序则JDBC代码在所有Java平台上(从网络计算机到大型机)都可以自动安装、移植并保证安全性。

  总之,JDBCAPI对于基本的SQL抽象和概念是一种自然的Java接口。

它建立在ODBC上而不是从零开始。

因此,熟悉ODBC的程序员将发现JDBC很容易使用。

JDBC保留了ODBC的基本设计特征;事实上,两种接口都基于X/OpenSQLCLI(调用级接口)。

它们之间最大的区别在于:

JDBC以Java风格与优点为基础并进行优化,因此更加易于使用。

  目前,Microsoft又引进了ODBC之外的新API:

RDO、ADO和OLEDB。

这些设计在许多方面与JDBC是相同的,即它们都是面向对象的数据库接口且基于可在ODBC上实现的类。

但在这些接口中,我们未看见有特别的功能使我们要转而选择它们来替代ODBC,尤其是在ODBC驱动程序已建立起较为完善的市场的情况下。

它们最多也就是在ODBC上加了一种装饰而已。

四、JDBC对B/S和C/S模式的支持

  JDBCAPI既支持数据库访问的两层模型(C/S),同时也支持三层模型(B/S)。

在两层模型中,Javaapplet或应用程序将直接与数据库进行对话。

这将需要一个JDBC驱动程序来与所访问的特定数据库管理系统进行通讯。

用户的SQL语句被送往数据库中,而其结果将被送回给用户。

数据库可以位于另一台计算机上,用户通过网络连接到上面。

这就叫做客户机/服务器配置,其中用户的计算机为客户机,提供数据库的计算机为服务器。

网络可以是Intranet(它可将公司职员连接起来),也可以是Internet。

  在三层模型中,命令先是被发送到服务的"中间层",然后由它将SQL语句发送给数据库。

数据库对SQL语句进行处理并将结果送回到中间层,中间层再将结果送回给用户。

MIS主管们都发现三层模型很吸引人,因为可用中间层来控制对公司数据的访问和可作的的更新的种类。

中间层的另一个好处是,用户可以利用易于使用的高级API,而中间层将把它转换为相应的低级调用。

最后,许多情况下三层结构可提供一些性能上的好处。

  到目前为止,中间层通常都用C或C++这类语言来编写,这些语言执行速度较快。

然而,随着最优化编译器(它把Java字节代码转换为高效的特定于机器的代码)的引入,用Java来实现中间层将变得越来越实际。

这将是一个很大的进步,它使人们可以充分利用Java的诸多优点(如坚固、多线程和安全等特征)。

JDBC对于从Java的中间层来访问数据库非常重要。

五、SQL的一致性

  结构化查询语言(SQL)是访问关系数据库的标准语言。

困难之处在于:

虽然大多数的DBMS(数据库管理系统)对其基本功能都使用了标准形式的SQL,但它们却不符合最近为更高级的功能定义的标准SQL语法或语义。

例如,并非所有的数据库都支持储存程序或外部连接,那些支持这一功能的数据库又相互不一致。

人们希望SQL中真正标准的那部份能够进行扩展以包括越来越多的功能。

但同时JDBCAPI又必须支持现有的SQL。

  JDBCAPI解决这个问题的一种方法是允许将任何查询字符串一直传到所涉及的DBMS驱动程序上。

这意味着应用程序可以使用任意多的SQL功能,但它必须冒这样的风险:

有可能在某些DBMS上出错。

事实上,应用程序查询甚至不一定要是SQL,或者说它可以是个为特定的DBMS设计的SQL的专用派生物(例如,文档或图象查询)。

  JDBC处理SQL一致性问题的第二种方法是提供ODBC风格的转义子句,这将在后续部分中讨论。

转义语法为几个常见的SQL分歧提供了一种标准的JDBC语法。

例如,对日期文字和已储存过程的调用都有转义语法。

  对于复杂的应用程序,JDBC用第三种方法来处理SQL的一致性问题它利用DatabaseMetaData接口来提供关于DBMS的描述性信息,从而使应用程序能适应每个DBMS的要求和功能。

  由于JDBCAPI将用作开发高级数据库访问工具和API的基础API,因此它还必须注意其所有上层建筑的一致性。

"符合JDBC标准TM"代表用户可依赖的JDBC功能的标准级别。

要使用这一说明,驱动程序至少必须支持ANSISQL-2EntryLevel(ANSISQL-2代表美国国家标准局1992年所采用的标准。

EntryLevel代表SQL功能的特定清单)。

驱动程序开发人员可用JDBCAPI所带的测试工具包来确定他们的驱动程序是否符合这些标准。

  "符合JDBC标准TM"表示提供者的JDBC实现已经通过了JavaSoft提供的一致性测试。

这些一致性测试将检查JDBCAPI中定义的所有类和方法是否都存在,并尽可能地检查程序是否具有SQLEntryLevel功能。

当然,这些测试并不完全,而且JavaSoft目前也无意对各提供者的实现进行标级。

但这种一致性定义的确可对JDBC实现提供一定的可信度。

随着越来越多的数据库提供者、连接提供者、Internet提供者和应用程序编程员对JDBCAPI的接受,JDBC也正迅速成为Java数据库访问的标准。

六、JDBC入门--建立联接

教程:

JDBC入门作者:

MaydeneFisher翻译:

comer

  你需要做的第一事情是你与想要使用的DBMS建立一个连接。

这包含2个步骤:

装载驱动程序并建立连接。

装载驱动程序

  装载驱动程序只需要非常简单的一行代码。

例如,你想要使用JDBC-ODBC桥驱动程序,可以用下列代码装载它:

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  你的驱动程序文档将告诉你应该使用的类名。

例如,如果类名是jdbc.DriverXYZ,你将用代码以下的代码装载驱动程序:

    Class.forName("jdbc.DriverXYZ");

  你不需要创建一个驱动程序类的实例并且用DriverManager登记它,因为调用Class.forName将自动将加载驱动程序类。

如果你曾自己创建实例,你将创建一个不必要的副本,但它不会带来什么坏处。

  加载Driver类后,它们即可用来与数据库建立连接。

建立连接

  第二步就是用适当的驱动程序类与DBMS建立一个连接。

下列代码是一般的做法:

    Connectioncon=DriverManager.getConnection(url,"myLogin","myPassword");

  这个步骤也非常简单,最难的是怎么提供url。

如果你正在使用JDBC-ODBC桥,JDBCURL将以jdbc:

odbc开始:

余下URL通常是你的数据源名字或数据库系统。

因此,假设你正在使用ODBC存取一个叫"Fred"的ODBC数据源,你的JDBCURL是jdbc:

odbc:

Fred。

把"myLogin"及"myPassword"替换为你登陆DBMS的用户名及口令。

如果你登陆数据库系统的用户名为"Fernanda"口令为"J8",只需下面的2行代码就可以建立一个连接:

Stringurl="jdbc:

odbc:

Fred";

Connectioncon=DriverManager.getConnection(url,"Fernanda","J8");

  如果你使用的是第三方开发了的JDBC驱动程序,文档将告诉你该使用什么subprotocol,就是在JDBCURL中放在jdbc后面的部分。

例如,如果驱动程序开发者注册了acme作为subprotocol,JDBCURL的第一和第二部分将是jdbc:

acme。

驱动程序文档也会告诉你余下JDBCURL的格式。

JDBCURL最后一部分提供了定位数据库的信息。

  如果你装载的驱动程序识别了提供给DriverManager.getConnection的JDBCURL,那个驱动程序将根据JDBCURL建立一个到指定DBMS的连接。

正如名称所示,DriverManager类在幕后为你管理建立连接的所有细节。

除非你是正在写驱动程序,你可能无需使用此类的其它任何方法,一般程序员需要在此类中直接使用的唯一方法是DriverManager.getConnection。

  DriverManager.getConnection方法返回一个打开的连接,你可以使用此连接创建JDBCstatements并发送SQL语句到数据库。

在前面的例子里,con对象是一个打开的连接,并且我们要在以后的例子里使用它。

JDBC入门--设置表

创建表

  首先,我们在我们的示例数据库创建其中一张表COFFEES,包含在咖啡店所卖咖啡的必要的信息,包括咖啡名字,他们的价格,本星期卖了多少磅及迄今为止卖的数目。

关于COFFEES表我们以后会详细描述,如下:

COF_NAMESUP_IDPRICESALESTOTAL

Colombian1017.9900

French_Roast498.9900

Espresso1509.9900

Colombian_Decaf1018.9900

French_Roast_Decaf499.9900

  存储咖啡名的列是COF_NAME,它的SQL数据类型是VARCHAR,最大的长度为32个字符。

因为我们所卖的每种类型咖啡都使用不同的名字,名字可用于作为唯一识别咖啡的标识,因此可用于作主键。

第二个列叫SUP_ID,用于保存咖啡供应商标识;其SQL数据类型为INTEGER。

第3列叫PRICE,因为它需要保存带小数的十进制数,因此它的SQL类型为FLOAT。

(注意,通常钱的SQL类型为DECIMAL或NUMERIC,但在不同DBMSs间存在差异,为了避免于老版本的JDBC的不兼容性在本教程我们采用更标准的FLOAT类型)SALES列的SQL类型为INTEGER,其值为本星期所卖咖啡的磅数。

最后一列,TOTAL的SQL类型为INTEGER,保存了迄今为止所卖咖啡的总磅数。

  数据库里的第二个表SUPPLIERS,保存了每个供应商的信息:

SUP_IDSUP_NAMESTREETCITYSTATEZIP

101Acme,Inc.99MarketStreetGroundsvilleCA95199

49SuperiorCoffee1PartyPlaceMendocinoCA95460

150TheHighGround100CoffeeLaneMeadowsCA93966

  COFFEES跟SUPPLIERS都包含列SUP_ID,它意味着可以用SELECT语句从这两张表中取得有关信息。

列SUP_ID是SUPPLIERS表的主键,用于唯一识别每个咖啡供应商。

在COFFEES表中,SUP_ID列被称外键。

注意每个SUP_ID值在SUPPLIERS表里只出现一次;这对主键是必须的。

在COFFEES表里,它作为外键,显然它可以有重复的SUP_ID值,因为同一供应商可以提供很多种的咖啡。

在本节的最后,你将看见如何在SELECT语句中使用主键及外键的一个例子。

  下面的SQL语句用于?

列(包括列名及其SQL类型)跟下一个之间用逗号分隔。

VARCHAR类型创建定义了最大长度,因此它需要有一个参数来表示最大长度。

参数必须在类型后面的括号内。

SQL语句如下,列COF_NAME的长度被限定为不得超过32个字符:

CREATETABLECOFFEES

(COF_NAMEVARCHAR(32),

SUP_IDINTEGER,

PRICEFLOAT,

SALESINTEGER,

TOTALINTEGER)

  这些代码不带DBMS语句结束符,因为每个DBMS都可能不同。

例如,Oracle使用一个分号(;)作为语句的结束,而Sybase使用go。

你所使用的驱动程序会自动提供合适的语句结束符,因此你无须把它包括在你的JDBC代码中。

  另外,我们应该指出的的是SQL语句的格式。

在CREATETABLE语句中,关键字采用大写字符,并且每个项目都另起一行。

SQL并没有此要求;仅仅是为了更容易阅读。

SQL标准是不区分关键词的大小写的,因此,如下例中的SELECT语句可以有多种写法。

因此下面两个不同写法的语句对SQL来说是一样的。

SELECTFirst_Name,Last_Name

FROMEmployees

WHERELast_NameLIKE"Washington"

selectFirst_Name,Last_NamefromEmployeeswhere

Last_Namelike"Washington"

  然而,引号里的内容是区分大小写的:

在名字"Washington"里"W"必须被大写,并且余下的字符必须是小写的。

  对于标识,不同的DBMS有不同的要求,例如,某些DBMSs要求那些列名及表名必须跟创建时的一样,有些则没有此要求。

为安全起见,我们全部使用大写标识如COFFEES、SUPPLIERS,因为我们是那样定义他们的。

  到止我们写了创建COFFEES表的SQL语句。

现在我们在它外面加上引号(使它成为字符串),并且字符串赋值给变量createTableCoffees,在以后的JDBC代码中我们可以使用此变量。

正如看到的,DBMS并不在意分行,但对Java语言来,String对象分行是通不过编译的。

因而,我们可以用加号(+)把每一行的串连接。

StringcreateTableCoffees="CREATETABLECOFFEES"+

"(COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,"+

"SALESINTEGER,TOTALINTEGER)";

  我们在CREATETABLE语句中使用的数据类型是通用的SQL类型(也称JDBC类型)它们在类java.sql.Types中定义。

DBMSs通常使用这些标准的类型,因此,当你要尝试一些JDBC应用程序时,你可以直接使用CreateCoffees.java应用程序,它使用了CREATETABLE语句。

如果你的DBMS使用了它的自己的本地的类型名字,我们为你供应其它的应用程序,我们将在后面详细解释。

  在运用任何应用程序前,当然,我们将让你了解JDBC的基础。

创建JDBCStatements对象

  Statement对象用于把SQL语句发送到DBMS。

你只须简单地创建一个Statement对象并且然后执行它,使用适当的方法执行你发送的SQL语句。

对SELECT语句来说,可以使用executeQuery。

要创建或修改表的语句,使用的方法是executeUpdate。

  需要一个活跃的连接的来创建Statement对象的实例。

在下面的例子中,我们使用我们的Connection对象con创建Statement对象stmt:

Statementstmt=con.createStatement();

  到此stmt已经存在了,但它还没有把SQL语句传递到DBMS。

我们需要

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1