⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdbc.txt~3~

📁 许多开发者和用户都在寻找Java程序中访问数据库的便捷方法。由于Java是一个健壮
💻 TXT~3~
📖 第 1 页 / 共 3 页
字号:
许多开发者和用户都在寻找Java程序中访问数据库的便捷方法。由于Java是一个健壮,安全,易于使用的,易于理解且可以从网络中自动download ,所以它成为开发数据库应用的一种良好的语言基础。它提供了C,C++,Smalltalk, BASIC, COBOL,and 4GLs的许多优点。许多公司已经开始在Java与DBMS的连接方面做工作。许多Java应用开发者都希望能够编写独立于特定DBMS的程序,而我们也相信一个独立于DBMS的接口将使得与各种各样DBMS连接变得最为便捷,开发更加迅速。所以我们认为定义一个通用的SQL数据库存取框架,在各种各样的提供数据库连接模块上提供统一的界面是十分有意义的。这使程序员可以面对单一的数据库界面,使数据库无关的Java工具和产品成为可能,使得数据库连接的开发者可以提供各种各样的连接方案。我们看到我们定义一个通用低层的,支持基本SQL功能的JavaDataBase Connectivity (JDBC)API的紧迫任务。幸运的是我们不必从头设计一个SQL API。我们可以把我们的工作建立在X/Open SQLCLI (调用层接口)之上(它也是Microsoft's ODBC的基础)。我们主要任务是定义一个自然的Java接口来与X/Open CLI中定义的基本的抽象层和概念连接。JDBC API得到数据库开发厂商,连接开发厂商,ISV,以及应用开发者的支持是十分重要的。我们相信把我们的工作建立在ODBC抽象层的基础上将JDBC更加容易得到大家的接受。而且从技术上来说,ODBC是我们设计工作的一个良好基础。因为ODBC是一个C语言接口,所以ODBC在Java中直接使用不适当。从Java中来调用C代码在安全性,健壮性,实现的方便,可移植性等等方面有许多不便。它使得Java在这些方面的许多优点得不到发挥。我们已经在短期里面实现了一个建立在ODBC上的API。长远来看,我们可以通过其他方式提供实现。SQL 级 API我们的主要目标是为Java定义一个“调用级”(call-level)的SQL接口。这意味着我们主要的注意力集中在执行原原本本的SQL语句并且取回结果。我们预计高层的API也将被定义,这些可能将建立在基层的接口上。这些高层接口包括象直接地、透明地把表里面的数据影射到Java类里面,用语法树表示更加通用的查询,以及Java内嵌的SQL语法。我们希望大量的应用开发工具将使用我们的API。然而我们也希望程序员能够使用我们的API,尤其是目前这样在Java里没有任何其他手段(应该是说数据库访问手段)的情况下。遵循SQL数据库系统支持各式各样的SQL语法和语义,它们相互之间在比较高级的功能例如外部连接,内嵌过程等方面并不一致,尽管我们能够盼望着随时间的推移这些部分的SQL可以获得标准化。同时我们采取这样的态度与立场:JDBC允许查询表达式直接传递到底层的数据驱动,这样一个程序可以获得尽量多的SQL功能,但是可能被DBMS拒绝。事实上,一个程序的查询甚至可以不是SQL的,或者是SQL的一个特殊演化,例如:为专门数据库设计的文本或者图形查询。为了通过JDBC兼容的测试,并且能够被称为JDBC兼容,我们要求一个驱动至少支持ANSI SQL-2的标准。这使得那些需要广泛移植性的程序获得一个最小的分母我们相信ANSISQL-2是足够强大的,并且是得到足够支持的。JDBC必须可以建立在现有的数据库接口上我们必须能够保证 JDBC SQL API 能够建立在普通的SQL API上,尤其是ODBC。这些要求已经对这个规范的一些部分产生了影响,尤其是对传出参数(OUT parameter)和大数据块的处理。必须保证这个接口与JAVA系统的其他部分保持一致目前对JAVA的积极回应已经十分热烈。很大程度上是由于这个语言标准以及标准运行时库被认为是一致,简单和强大的。我们将尽我们所能,提供这个Java数据库接口,我们希望通过这个接口建立普通的任务能够是简单的,而非常规任务是可行的。所谓一个普通任务是指执行一个简单的没有参数的SQL语句(例如:SELECT,INSERT,UPDATE,DELETE),然后(例如SELECT)处理返回的具有简单类型的元组。一个具有传入参数(IN parameter)的SQL语句也是普通的。稍微复杂的非常用任务是使用有INOUT,OUT参数的SQL语句。我们也需要支持读写几兆字节对象的SQL语句,更特别一些的情形包括一个语句返回了多个结果集合。我们希望元数据(Meatdata)的使用很少的,只是那些熟练的程序员以及开发工具才需要处理的问题。不同的功能让不同的方法(函数)来实现一种界面设计风格是使用很少的过程,提供许多作为参数传递的控制标志,这样它们可以用来影响很大一个范围内的各种行为来表达不同的功能。另一趋向是使用很多的方法,但是每个方法都比较容易理解。一般来说,Java内核类使用不同的方法。这个步骤的主要优点是开始学习基本界面的程序员可以不必被那些与复杂功能相关的参数所困扰。我们力图在JDBC接口上也采用相同的策略。一般来说采用不同的方法而不是采用不同的标志和多用途的方法。接口概貌接口分为两个层次,一个是面向程序开发人员的JDBC API。另一个是底层的JDBC Driver API。JDBC API的重要的接口:java.sql.DriverManager       处理驱动的调入并且对产生新的数据库连接提供支持。java.sql.Connection          代表对特定数据库的连接。java.sql.Statement          代表一个特定的容器,来对一个特定的数据库执行SQL语句。java.sql.ResultSet          控制对一个特定语句的行数据的存取。其中java.sql.Statement又有两个子类型:java.sql.PreparedStatement  用于执行预编译的SQL语句。java.sql.CallableStatement  用于执行对一个数据库Applet目前Java使用的最多的从网络中下载的applet,它们作为web文件的一个部分。当中有数据库存取applet和能够使用JDBC来接触数据库的applet。例如,一个用户可能下载一个显示股票历史价格图的applet。这个applet通过internet来从关系数据库中获得股票历史价格。最一般的情况里面,对applet的使用是通过不可靠的边界的。例如从另外一个公司或者Internet上获得这些applet。于是称这个情况为"Internet"场合。然而applet也可能通过局域网下载。在这个情况里面,客户机的安全都还是一个问题。ApplicationJava也可以用来建立普通的应用,从而想一般的应用一样在客户机上使用。我们相信随着开发工具越来越多,人们开始认识到提高程序生产效率的必要性,以及Java的其他优点,Java的这种用法将越来越流行。在这种方式里面,Java的代码是可以信赖的,且被允许读写文件打开网络连接等等,就想其他的应用程序代码一样。也许这些Java应用使用的最多的是在一个公司内部或者在Intranet上,所以不妨成为Intra-net场合。例如一个公司希望利用Java及其GUI构件工具来建立他的基于合作数据模式的合作软件。这些应用程序将存取局域网或者广域网的数据。Java应用可以作到这些。Java应用程序场合和Intranet场合与applet场合有诸多不同。例如标定一个数据库最自然的方式是用一个数据库的名字,就象"Customers"和"Personnel"这样。然后用户希望系统能够定位具体的机器,DBMS,JDBC driver,和Java应用程序。JDBC和Java应用程序但是如果一个JDBC驱动试图在多个数据库连接之间共享一个TCP连接,那么驱动就必须自己负责检查每个调用者是否真的被允许与目标数据库联系。例如如果我们为applet A打开了一个通往机器foobah 的TCP连接,这并不意味着applet B被自动允许来共享这个连接。applet B可能没有任何访问机器foobah的权力。所以在允许某个程序重用一个现成的TCP连接之前,JDBC驱动必须通过安全机构来检查当前的的调用者是否可以访问这个连接。通过下面的代码可是实现这个功能。SecurityManager security = System.getSecurityManager();if (security != null) {  security.checkConnect(hostName, portNumber);}如连接是不允许的,那么Security.checkConnect方法将产生java.lang.SecurityException。检查所有的本地文件访问如果一个JDBC取得需要访问本地机器上的数据,那么他必须确信调用者是被允许打开这个文件的。例如:SecurityManager security = System.getSecurityManager();if (security != null) {  security.checkRead(fileName);}如对特定文件的访问不允许,Security.checkRead方法将产生java.lang.SecurityException。另一种情形安全控制一些驱动可能使用本地的方法来桥接底层数据库程序。这种情形下判断那些本地文件将被底层函数所访问是困难的。在这些环境里面用户必须作好最坏的打算,并且否决所有下载applet所发出的数据库存取,除非驱动能完全确信将要做存取的是没有问题的。例如:一个JDBC-ODBC桥接器必须检查ODBC数据源的的名称,确保applet只可以访问它的“生源地”。如果对有的名字中不能判断出数据源的主机名,那么只能否决这个访问。为了决定一个当前的调用者是可以信赖的应用还是一个applet,JDBC驱动必须能够检查这个调用者是否可以写一个随机的文件:SecurityManager security = System.getSecurityManager();if (security != null) {  security.checkWrite("foobaz");}JDBC的定义什么是JDBC,相信有一定数据库编程经验的XDJM们一定是耳熟能详了,JDBC的定义是两组分别面向应用程序开发人员和数据库驱动程序开发人员的两组API(Application Programming Interface),以及将前者向后者转化的内在封装逻辑。JAVA开发人员只需关心面向应用程序开发人员的接口即JDBC API,也就是各版本的JDK在包java.sql.*中定义的类、接口、异常(Exception)以及这些类和接口中定义的属性(property)和方法(method)。开发数据库应用系统的模型JDBC典型的开发模型大致可分为两种,分别是二层和三层结构。① 二层模式在这种结构模型下,应用程序(客户端)直接与数据库服务器相连,这种结构是一般中小企业内部基于局域网的软件系统的数据库模型,具有如下特点:(1) 客户机程序直接向数据库服务器发送SQL请求,服务器返回相应的结果,客户机负责数据的标准化,结构简单,执行速度快。(2) 受数据库厂家的限制,更换数据库管理系统时需要改写大量的客户端的原代码。(3) 受数据库版本的限制,厂家更新数据库时,使用原数据库的应用程序要重新编译和发布。(4) 所有与访问数据库管理系统的操作都是在客户机应用程序中实现的,造成客户机设计和修改的复杂,增加了客户机的成本。② 三层结构在三层结构模型中,客户端和数据库服务器之间增加了一个中间服务器,客户机与中间服务器进行通信,由中间服务器处理客户机的请求并控制对一个或多个数据库管理系统的访问控制。这种结构是Internet普遍使用的模式,具有如下特点:(1) 应用客户端与数据库服务器不直接相连,各自的设计相互独立,数据库管理系统的更换不影响客户机的程序。比如说:某一个WWW网站的Web服务器使用Apache+Tomcat(中间服务器)来响应HTTP请求,解释JSP程序。网站的数据库服务器采用MS SQL Server。Internet用户使用Internet Explorer 或者Netscape Communictor (客户端)来浏览该网户端(IE or NC)不需要进行任何改动, 依然可以正常浏览该网站。(2) 密集任务的处理和数据操作抽象到更高层,简化了客户机的设计,防止客户机变的过于臃肿。(3) 由专门的高性能服务器处理客户机的请求、与数据库进行通信,提高了数据库的访问效率。利用JDBC API对数据库进行访问(1)JSP调用JDBC API访问数据库管理系统是通过以下五个步骤来实现的/*加载特定的JDBC驱动程序为了与特定的数据源连接,JDBC必须加载相应的驱动程序。这些驱动程序都是通过语句Class.forName("Driver Name"); 来加载的。在”Driver Name”处填入一系列的驱动程序名称,例如:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver:oracle.jdbc.driver.OracleDriver”);中间用冒号隔开。JSP将按照列表顺序搜索驱动程序,并且加载第一个能与给定的URL相连的驱动程序。在搜索驱动程序列表时,JSP将跳过含有不可可信任代码的驱动程序,除非他与要打开的数据库管理系统是来源于同一处.(2)用已经注册的驱动程序建立到数据库管理系统的连接,这要通过DriverManager类的getConncetion方法来实现。这里特别需要注意的是String类型 url 参数的取值,url代表一个将要连接的特定的数据库管理系统的数据源。使用不同的数据库驱动程序,url的取值方式是不同的。例程中加载了“com.mysql.jdbc.Driver”驱动,url的取值方式为"jdbc:mysql://localhost:3306/ums_db?useUnicode=true&characterEncoding=GB2312",如果加载“oracle.jdbc.driver.OracleDriver”驱动,url的取值方式应该是“jdbc:oracle:thin:@host name:port number:service name”。其他驱动程序的url的取值方式,各位自行参阅相应的文挡。例程中的GetConnection()方法只有一个参数String url,代表ODBC数据源,如果连接大型数据库,则需要三个参数:String url、Strng user、String password。User和password代表数据库管理系统的用户名和口令。一般的大型数据库如Oracle、MS SQL Server、

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -