jdbc是什么?
JDBC为工具/数据库开发者提供了标准的API,这样可以构建更高级的工具和接口,数据库开发者可以用纯Java API编写数据库应用。同时,JDBC也是一个品牌名称。使用JDBC,很容易将SQL语句发送到各种关系数据。换句话说,有了JDBC API,就不需要专门为访问Sybase数据库写一个程序,专门为访问Oracle数据库写另一个程序,或者专门为访问Informix数据库写另一个程序等等。程序员只需要用JDBC API编写一个程序,就可以向相应的数据库发送SQL调用。同时,Java语言和JDBC的结合,使得程序员不必为不同的平台编写不同的应用程序,只需编写一次程序就可以在任何平台上运行,这也是Java语言“一次编写,随处运行”的优势。Java数据库连接架构是Java应用程序连接数据库的标准方法。JDBC是Java程序员的API,也是连接数据库的服务提供商的接口模型。作为API,JDBC为程序开发提供了标准接口,为数据库厂商和第三方中间件厂商提供了连接数据库的标准方法。JDBC使用现有的SQL标准,并支持与其他数据库连接标准(如ODBC)的桥接。JDBC已经实现了所有这些面向标准的目标,并且拥有简单、严格的类型定义和高性能的接口。Java具有坚固、安全、易用、易理解、可从网络自动下载的特点,是编写数据库应用程序的优秀语言。所需要的只是一种在Java应用程序和各种数据库之间对话的方式。JDBC是实现这一目标的机制。JDBC扩展了Java的功能。例如,Java和JDBC API可用于发布包含小程序的网页,小程序使用的信息可能来自远程数据库。企业还可以使用JDBC通过内部网将所有员工连接到一个或多个内部数据库(即使这些员工使用的计算机具有不同的操作系统,如Windows、Macintosh和UNIX)。随着越来越多的程序员开始使用Java编程语言,从Java方便地访问数据库的需求也在增加。MIS管理员都喜欢Java和JDBC的结合,因为它使信息传播既容易又经济。即使信息存储在不同的数据库管理系统中,企业也可以继续使用已安装的数据库并方便地访问信息。新程序的开发周期很短。安装和版本控制将大大简化。程序员可以编写一次应用程序或者更新一次,然后放在服务器上,然后任何人都可以获得最新版本的应用程序。对于企业销售信息服务,Java和JDBC可以为外部客户提供更好的获取信息更新的方法。简单地说,JDBC可以做三件事:与数据库建立连接,发送SQL语句并处理结果。以下代码片段给出了上述三个步骤的基本示例:connection con = driver manager . getconnection(" JDBC:odbc:袋熊","登录","密码");statement stmt = con . create statement();ResultSet rs = stmt.executeQuery("从表1中选择a,b,c ");while(RS . next()){ int x = RS . getint(" a ");string s = RS . getstring(" b ");float f = RS . get float(" c ");}上面的代码对基于JDBC的数据库访问做了一个经典的总结,当然在本节的后续部分会详细分析和解释。JDBC API JDBC是一个“低级”接口,也就是说,它用于直接调用SQL命令。在这方面,它具有出色的功能,并且比其他数据库连接API更容易使用,但它也是作为一个基本接口而设计的,在这个基础上可以构建高级接口和工具。高层接口是“用户友好”的接口,使用更易理解、更方便的API,在幕后转化为JDBC等低层接口。在关系数据库的“对象/关系”映射中,表中的每一行对应类的一个实例,每一列的值对应实例的一个属性。这样,程序员可以直接操作Java对象;访问数据所需的SQL调用将在后台自动生成。此外,还可以提供更复杂的映射,比如将多个表中的行合并到一个Java类中。随着对JDBC越来越感兴趣,越来越多的开发人员开始使用基于JDBC的工具来简化编程。程序员也一直在编写应用程序,试图让最终用户更容易访问数据库。例如,应用程序可以提供用于选择数据库任务的菜单。选择任务后,应用程序将给出提示和空白,以填写执行所选任务所需的信息。所需信息输入应用程序将自动调用所需的SQL命令。在这样一个程序的帮助下,用户即使完全不懂SQL的语法也可以执行数据库任务。JDBC和ODBC的比较目前,微软的ODBC API可能是访问关系数据库最广泛使用的编程接口。它可以连接几乎所有平台上的几乎所有数据库。Java为什么不用ODBC?这个问题的答案是:Java可以使用ODBC,但是最好在JDBC的帮助下以JDBC-ODBC桥的形式使用,这个我们后面会讲到。现在问题变成了:“你为什么需要JDBC?”?答案很明显:ODBC不适合在Java中直接使用,因为它使用C语言接口。从Java调用本地C代码,在安全性、实现性、健壮性、程序的自动移植性等方面都有很多缺点。从ODBC C API到Java API的字面翻译是不可取的。比如Java没有指针,ODBC却广泛使用指针(包括容易出错的指针“void *”)。你可以把JDBC想象成ODBC转换成面向对象的接口,Java程序员更容易接受。ODBC很难学。它混合了简单和高级的功能,即使对于简单的查询,它的选项也是极其复杂的。相反,JDBC试图确保简单功能的简单性,同时允许在必要时使用高级功能。启用“纯Java”机制需要像JDBC这样的Java API。如果使用ODBC,则必须在每个客户端上手动安装ODBC驱动程序管理器和驱动程序。如果JDBC驱动程序完全用Java编写,JDBC代码可以在所有Java平台(从网络计算机到大型机)上自动安装、移植和保护。总之,JDBC API是基本SQL抽象和概念的自然Java接口。它建立在ODBC之上,而不是从零开始。因此,熟悉ODBC的程序员会发现JDBC很容易使用。JDBC保留了ODBC的基本设计特征;其实两个接口都是基于X/Open SQL CLI(调用级接口)。两者最大的区别在于,JDBC是基于Java风格和优点而优化的,所以更容易使用。目前,微软已经推出了除ODBC之外的新API:RDO、ADO和OLE DB。这些设计在许多方面与JDBC相同,即它们都是面向对象的数据库接口,并且基于可以在ODBC上实现的类。但是在这些接口中,我们看不到有什么特殊的功能让我们选择它们而不是ODBC,尤其是在ODBC驱动已经建立了一个相对完善的市场的情况下。他们最多只是在ODBC上加一个装饰。JDBC支持B/S和C/S,JDBC API支持两层(C/S)和三层(B/S)的数据库访问模式。在两层模型中,Java applet或应用程序将直接与数据库对话。这将需要一个JDBC驱动程序与被访问的特定数据库管理系统进行通信。用户的SQL语句被发送到数据库,结果将被发送回用户。数据库可以位于另一台计算机上,用户可以通过网络连接到它。这称为客户机/服务器配置,其中用户的计算机是客户机,提供数据库的计算机是服务器。网络可以是内部网(可以连接公司员工)或互联网。在三层模型中,命令首先被发送到服务的“中间层”,然后它将SQL语句发送到数据库。数据库处理SQL语句并将结果发送回中间层,然后中间层将结果发送回用户。MIS主管发现三层模型很有吸引力,因为中间层可以用来控制对公司数据的访问和可以进行的更新类型。中间层的另一个好处是,用户可以使用易于使用的高级API,中间层会将其转换成相应的低级调用。最后,在许多情况下,三层结构可以提供一些性能优势。到目前为止,中间层通常用C或C++等语言编写,执行速度更快。但是,随着优化编译器(将Java字节码转换成高效的机器专用代码)的引入,用Java实现中间层将变得越来越实用。这将是一个很大的进步,它使人们能够充分利用Java的许多优点(如健壮性、多线程和安全性)。JDBC对于从Java中间层访问数据库非常重要。SQL一致结构化查询语言(SQL)是访问关系数据库的标准语言。困难在于,尽管大多数DBMS(数据库管理系统)使用标准SQL作为其基本功能,但它们不符合最近为更高级的功能定义的标准SQL语法或语义。比如不是所有的数据库都支持存储程序或者外部连接,支持这个功能的不一致。人们希望SQL中真正标准的部分可以扩展到包含越来越多的功能。同时,JDBC API必须支持现有的SQL。JDBC API解决这个问题的一个方法是允许任何查询字符串一直传递到相关的DBMS驱动程序。这意味着应用程序可以使用任意数量的SQL函数,但是它必须承担在某些DBMS上出错的风险。事实上,应用程序查询甚至不必是SQL,也可以是为特定DBMS设计的SQL的特殊衍生物(例如,文档或图像查询)。JDBC处理SQL一致性的第二种方法是提供ODBC风格的转义子句,这将在后续部分中讨论。转义语法为几种常见的SQL差异提供了标准的JDBC语法。例如,对日期文本和存储过程的调用具有转义语法。对于复杂的应用程序,JDBC使用第三种方法来处理SQL的一致性。它使用DatabaseMetaData接口来提供关于DBMS的描述性信息,以便应用程序能够适应每个DBMS的要求和功能。由于JDBC API将被用作开发高级数据库访问工具和API的基础API,因此它还必须注意其所有上层结构的一致性。“符合JDBC标准TM”代表用户可以依赖的JDBC功能的标准水平。要使用该指令,驱动程序必须至少支持ANSI SQL-2入门级(ANSI SQL-2代表美国国家标准局1992采用的标准)。入门级表示SQL函数的特定列表)。驱动程序开发人员可以使用JDBC API附带的测试工具包来确定他们的驱动程序是否符合这些标准。“符合JDBC标准TM”意味着提供商的JDBC实现已经通过了JavaSoft提供的一致性测试。这些一致性测试将检查JDBC API中定义的所有类和方法是否存在,如果可能,程序是否具有SQL入口级功能。当然,这些测试并不完整,JavaSoft目前也无意对各种提供者的实现进行评分。然而,这个一致性定义确实为JDBC实现提供了一些可信度。随着越来越多的数据库提供商、连接提供商、互联网提供商和应用程序员接受JDBC API,JDBC正迅速成为Java数据库访问的标准。JDBC连接您需要做的第一件事是与您想要使用的DBMS建立连接。这包括两个步骤:加载驱动程序和建立连接。加载驱动程序加载驱动程序只需要一行非常简单的代码。例如,如果您想使用JDBC-ODBC桥驱动程序,您可以加载以下代码:class.forname ("sun。JDBC . odbc . JDBC odbc driver ");你的驱动文档会告诉你应该使用的类名。例如,如果类名是jdbc。DriverXYZ,您将使用以下代码加载驱动程序:Class.forName("jdbc。driver XYZ”);不需要创建驱动类的实例并向DriverManager注册,因为调用Class.forName会自动加载驱动类。如果你自己已经创建了一个实例,你会创建一个不必要的副本,但这不会有什么坏处。加载驱动程序类后,可以使用它们来建立与数据库的连接。建立连接的第二步是用适当的驱动程序类建立与DBMS的连接。下面的代码是一个通用的做法:connection con = driver manager . get connection(URL," mylogin "," my password ");这一步也很简单,最难的是如何提供网址。如果您使用JDBC-ODBC桥,JDBC URL将以jdbc:odbc开头:URL的其余部分通常是您的数据源名称或数据库系统。因此,假设您正在使用ODBC访问一个名为“Fred”的ODBC数据源,您的JDBC URL是jdbc:odbc:Fred。用您登录DBMS的用户名和密码替换“myLogin”和“myPassword”。如果用用户名“Fernanda”和密码“J8”登录数据库系统,可以用下面两行代码建立连接:String URL = " JDBC:odbc:Fred ";connection con = driver manager . get connection(URL," Fernanda "," J8 ");如果您使用的是第三方开发的jdbc驱动程序,文档会告诉您使用什么子协议,这是JDBC URL中JDBC之后的部分。例如,如果驱动程序开发人员将acme注册为子协议,那么JDBC URL的第一部分和第二部分将是jdbc:acme。驱动文档还会告诉你剩下的JDBC URL的格式。JDBC URL的最后一部分提供了定位数据库的信息。如果您加载的驱动程序识别提供给DriverManager.getConnection的JDBC URL,该驱动程序将根据JDBC URL建立到指定DBMS的连接。顾名思义,DriverManager类在幕后为您管理建立连接的所有细节。除非你正在编写一个驱动程序,否则你可能不需要在这个类中使用任何其他方法。普通程序员在这个类中唯一需要直接使用的方法是DriverManager.getConnection,DriverManager.getConnection方法返回一个打开的连接,你可以用它来创建JDBC语句,并向数据库发送SQL语句。