




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章
中间件技术
内容异构数据库与中间件ODBC结构ODBC接口ODBC的符合性级别异构数据库网络上存在各种截然不同的数据库SQLServerDB2ORACLESYBASE…..ApplicationCONNECTSQLServerORACLEDB2中间件中间件的定义中间件的作用中间件的定义中间件(middleware):是分布式环境中保证操作系统、通信协议、数据库等之间进行对话、互操作的软件系统。在C/S环境中,中间件同时存在于客户端和服务器端,负责客户和服务器间透明的请求和回答交换。中间件允许不同服务器之间相互通信,如数据库网关。应用开发者不需关心特定环境的低层细节,通过中间件等访问数据库,有关代码不依赖于某一具体数据库及该数据库所在平台,所得到的应用软件也易于移植和升级。中间件的作用中间件的作用是保证网络中各部件(软件和硬件)之间透明地连接隐藏网络部件的异构性,保证不同网络、不同DBMS和某些访问语言的透明性。网络透明性:能支持所有类型的网络。服务器透明性:不管服务器上的DBMS是何种型号(ORACLE、SYBASE、DB2等。语言透明性:客户机可用任何开发语言进行发送请求和接受回答,被调用的功能应该像语言那样也是独立的。
中间件的分类根据用途不同,中间件可分为:数据访问中间件,如ODBC,JDBC,OLEDB;远程过程调用(RPC)中间件;分布式事务处理中间件;对象调用中间件;面向消息的中间件;等。ODBC结构ODBC概念ODBC的体系结构ODBC的特性网络异构数据库访问接口传统的数据库编程方式“主语言+DML”问题:特定的前端应用不能访问不同数据库服务器上的数据。各厂商的SQL版本不同,使得不同的RDBMS提供的SQL互不兼容。不同厂商的RDBMS在客户机与数据库服务器之间使用了不同的通信协议。公共的、与数据库无关的应用程序设计接口(API:ApplicationProgrammingInterface)。开发者提供单一的编程接口,同一个应用程序就可以访问不同的数据库服务器。网络异构数据库访问接口SQL/CLI1989,微软等四家公司联合提出SQLConnectivity访问接口规范,定义了一批访问数据库的函数1990,SAG(SQLAccessGroup)集团接受SQLConnectivity作为其调用级接口规范的基础(CallLevelInterface,CLI),并获得ANSI,ISO的认可,作为SQL92的附件SQL/CLI1992,微软发布基于扩展的SQL/CLI的工具集ODBCODBC概念最早的ODBC版本1.0是在1993年8月发布的。2.0版本、3.0版本、3.5版本分别在1994年12月、1995年10月、1996年10月发布,每一次的发布都作了一些改进,着重于速度、对新的OS的兼容性以及对ODBC可访问的更高级DBS所具有的功能提供支持。ODBC技术对C/S计算模式的发展产生了革命性的影响。微软ODBCV3.0有61个函数,分为10类ODBC函数类型连接一个数据源取得有关驱动程序和数据源的信息设置并检索驱动程序的属性设置并检索描述字符段准备SQL请求提交请求检索结果及有关结果的信息获得有关数据源系统表的信息结束一条语句结束一个连接ODBC原理应用程序应用程序应用程序……SYBASE公共接口API网络软件FoxproSQLServerDB2Oracle图10.1采用API的应用编程ODBC的体系结构ODBC数据库应用程序驱动程序管理器SQLServer驱动程序Oracle驱动程序Foxpro驱动程序Sybase驱动程序DB2驱动程序SQLServer数据源Oracle数据源DB2数据源Sybase数据源Foxpro数据源DBDBDBDBDB图10.2ODBC的分层体系结构ODBC的体系结构数据源:DB驱动程序与DBS之间连接的命名包含了数据库位置和数据库类型等信息是一种数据连接的抽象注册一个数据源:通过ODBC管理器注册控制面板—系统和安全—管理工具—数据源(ODBC)ODBC管理器:管理安装的ODBC驱动程序和管理数据源根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系应用程序提供数据源名给ODBC,ODBC就能建立起与相应数据库的连接ODBC的体系结构数据源分为以下三类:用户数据源:用户创建的数据源,称为“用户数据源”。此时只有创建者才能使用,并且只能在所定义的机器上运行。任何用户都不能使用其他用户创建的用户数据源。系统数据源:系统数据源属于创建它的计算机,而不是创建它的用户。所有用户和在WindowsNT下以服务方式运行的应用程序均可使用系统数据源。文件数据源:文件数据源是ODBC3.0以上版本增加的一种数据源,可用于企业用户,ODBC驱动程序也安装在用户的计算机上共享数据库文件。用户数据源用户数据源用户数据源ODBC的体系结构DB驱动程序ODBC函数和数据源交互的DLL,提供了ODBC和数据库之间的接口,装入:应用程序调用SQLConnect或SQLDriverConnect时,驱动程序管理器装入相应的驱动程序对来自应用程序的ODBC函数调用进行应答,按照其要求执行以下任务:建立应用程序与数据源的连接;向数据源提交用户请求执行的SQL语句;在应用程序需求时,转换数据格式;把处理结果返回给应用程序;将执行过程中DBS返回的错误转换成ODBC定义的标准错误代码,并返回给应用程序;根据需要定义和使用光标。ODBC的体系结构DB驱动程序:SQLServer的驱动数据源和DB驱动程序数据源和DB驱动程序数据源和DB驱动程序数据源和DB驱动程序数据源和DB驱动程序数据源和DB驱动程序数据源和DB驱动程序数据源和DB驱动程序数据源和DB驱动程序ODBC的体系结构DB驱动程序:两类单层次(single-tier):这种方式下,驱动程序要处理ODBC调用SQL语句,并直接操纵数据库,因此具有数据存取功能。最常见的是同一台微机之上异种数据库通过ODBC存取,如在PowerBuilder中存取Excel、Paradox等数据文件ODBC的体系结构工作站ODBC数据库应用程序驱动程序管理器单层驱动程序(包含DB引擎)数据库文件(*.mdf)网络文件服务器ODBC的体系结构多层驱动程序:驱动程序仅处理ODBC调用将SQL语句交给服务器执行,然后返回结果往往应用程序、驱动程序管理器、驱动程序驻留在客户机端,而数据源和数据存取功能放在服务器端FoxPro或PowerBuilder存取SQLServer或Oracle上的数据两者之间加上网关以解决通信协议的转换等问题ODBC的体系结构工作站ODBC数据库应用程序驱动程序管理器单层驱动程序(包含DB引擎)数据库文件(*.DBF)网络文件服务器图10.3网络环境下基于单层驱动程序的ODBC结构ODBC的体系结构ODBC数据库应用程序
驱动程序管理器多层驱动程序
客户端网络支撑软件
服务器网络支撑软件数据库引擎数据库文件(*.mdf)DB服务器(网络)客户端SQL请求操作结果图10.4基于多层驱动程序的ODBC结构(两层结构)Web数据库中间件体系结构在web上为解决Web到数据库通信协议的转换,加入数据库网关基于通用网关CGI:CGI:www服务器外部程序规范,按照CGI编写的程序用于扩展服务器的功能。用户浏览器通过HTTP协议向web服务器发出查询请求Web服务器按照CGI协议激活外部程序CGI程序分析html文本,生成查询要求的SQL语句,连接数据库,将DBMS返回的结果转化为html文本,发送给web服务器Web服务器将嵌入有查询结果的html文本发送用户浏览器ODBC的体系结构CGI的局限性客户端与后端数据库服务器通信必须通过Web服务器,且Web服务器要进行数据与HTML文档的互相转换,当多个用户同时发出请求时,必然在Web服务器形成信息和发布瓶颈;CGI应用程序每次运行都需打开和关闭数据库连接,效率低,操作费时;CGI应用程序不能由多个客户机请求共享,即使新请求到来时CGI程序正在运行,也会启动另一个CGI应用程序,随着并行请求的数量增加,服务器上将生成越来越多的进程。为每个请求都生成进程既费时又需要大量内存,影响了资源的使用效率,导致性能降低并增加等待时间;由于SQL与HTML差异很大,CGI程序中的转换代码编写繁琐,维护困难;安全性差,缺少用户访问控制,对数据库难以设置安全访问权限;HTTP协议是无状态且没有常连接的协议,DBMS事务的提交与否无法得到验证,不能构造Web上的OLTP(On-LineTransactionProcessing联机事务处理)应用。ODBC的体系结构基于扩展的web服务器API作为dll驻留在web服务器中,功能与CGI类似。与web服务器结合紧密,占用资源少各个厂家的API兼容性差,编程复杂,多线程,同步,直接协议编程,错误处理等ASP(ActiveServerPages)基于组件(com)模型,结合html脚本可以直接在html文本中包含可执行的脚本,html文本和脚本的开发结合为一个过程JDBCJava执行SQL语句的API,由一系列的类和接口组成(Java.sql包中)通过JDBC,Javaapplet可以直接与数据库连接、查询ODBC的体系结构客户端首先访问Web服务器,下载Java字节码文件,并将Applet相关类的字节码文件和JDBC接口字节码文件下栽到客户端,然后与Web服务器脱离,接着Applet根据数据库地址,端口号和帐号与数据库服务器连接进行交互,这样用户与数据库服务器的交互是由浏览器直接完成的。Web数据库中间件体系结构数据库应用程序
客户端网络支撑软件
数据库引擎数据库服务器网络支撑软件数据库网关驱动程序管理器驱动程序图10.5基于网关机制的多层驱动程序的ODBC结构(三层结构)客户浏览器(网络)WWW服务器数据库服务器ODBC的体系结构驱动程序管理器:一个动态链接库(DLL),ODBC32.DLL用于连接各种DBS的DBMS驱动程序,管理应用程序和DBMS驱动程序之间的交互作用(通信)。驱动程序管理器的主要功能如下:为不同驱动程序的ODBC函数提供单一的入口;检查ODBC调用参数的合法性和记录ODBC函数的调用;为应用程序加载DBMS驱动程序;调用正确的DBMS驱动程序;提供驱动程序信息。ODBC的体系结构应用程序主要完成:连接数据库; 向数据源发送SQL语句;为SQL语句执行结果分配存储空间;读取结果;处理错误;
向用户提交处理结果;事务提交和回退操作;断开与数据源的连接。ODBC的特性从ODBC的体系结构可以看出,ODBC技术有下列三个特性:(1)ODBC是一个调用层的接口。(2)ODBC定义了标准的SQL语法。(3)ODBC提供一个驱动程序管理器来管理 并同时访问多个DBMS系统。ODBC接口ODBC应用程序的基本流程ODBC句柄数据源的连接与断开SQL语句的执行查询结果的获取应用程序的基本流程分配环境句柄
分配连接句柄
与服务器连接分配语句句柄
语句处理和检索
与服务器断开释放语句句柄释放连接句柄释放环境句柄SQLAllocEnvSQLAllocConnectSQLConnectSQLAllocStmtSQLExecDirect(直接执行)SQLPrepare(语句预备)SQLExecute(语句执行)SQLDisconnectSQLFreeStmtSQLFreeConnectSQLFreeEnv初始化
SQL处理
终止
图10.6ODBC应用程序的基本流程ODBC句柄
环境句柄应用程序连接句柄连接句柄连接句柄语句句柄语句句柄语句句柄(只有一个)…………图10.7三种句柄之间的关系ODBC句柄…………环境句柄(定义DB应用环境)连接句柄(定义一个DB连接)语句句柄(定义一个SQL语句)□□□henvhdbc
hstmt
图10.8各种句柄之间的关系ODBC句柄一个ODBC句柄(Handle):一个应用程序变量,用来存储关于应用程序的上下文信息和应用程序所用到的一些对象。ODBC使用三个句柄环境句柄,一个环境句柄可以与多个连接句柄相连连接句柄,一个连接句柄可与多个语句句柄相连语句句柄,个应用程序只有一个环境句柄。环境句柄定义一个数据库环境, 连接句柄定义一个数据库连接, 语句句柄定义一条SQL语句。对于句柄,有两个ODBC函数:分配函数和释放函数。ODBC句柄环境句柄(EnvironmentHandles)
(1)分配环境句柄函数:SQLAllocEnv(phenv) (2)释放环境句柄函数:SQLFreeEnv(henv)连接句柄(ConnectionHandles) (1)分配连接句柄函数:SQLAllocConnect(henv,phdbc)
(2)释放连接句柄函数:SQLFreeConnect(hdbc)语句句柄(StatementsHandles) (1)分配语句句柄函数:SQLAllocStmt(hdbc,phstmt) (2)释放语句句柄函数:SQLFreeStmt(hstmt,fOption)
数据源的连接与断开(1)连接数据源的函数
SQLConnect(hdbc,szDSN,cbDSN,szUID,cbUID,szAuthStr,cbAuthStr)。 参数hdbc是一个已经分配的连接分配; 参数szDSN和cbDSN分别表示系统所要连接的数据源 名称及其长度; 参数szUID和cbUID分别表示用户标识符及其长度; 参数szAuthStr和cbAuthStr分别表示权限字符串 及其长度。(2)断开数据源函数
SQLDisconnect(hdbc)参数hdbc是要断开的连接句柄。
SQL语句的执行1.直接执行SQL语句的函数SQLExecDirect(hstmt,szSqlStr,cbSqlStr)其中,参数hstmt是一个有效的语句句柄; 参数szSqlStr和cbSqlStr分别表示将要执行 的SQL语句的字符串及其长度。例如,要以直接执行的方法列出学生表中的信息,调用该函数的格式是:retcode=SQLExecDirect(hstmt,“SELECT*FROMS”,SQL_NTS)SQL语句的执行main(){HENV henv; /*说明henv是一个环境型变量*/HDBC hdbc; /*说明hdbc是一个连接型变量*/HSTMT hstmt /*说明hstmt是一个语句句柄变量*/RETCODE retcode; /*说明retcode是一个返回变量*/SQLAllocEnv(&henv); /*分配一个环境句柄*/SQLAllocConnect(henv,&hdbc);/*分配一个连接句柄*/SQLConnect(hdbc,“学生”,SQL_NTS,NULL,0,NULL,0); /*连接数据源*/SQLAllocStmt(hdbc,&hstmt); /*分配一个语句句柄*/retcode=SQLExecDirect(hstmt,“SELECT*FROMS”,SQL_NTS); /*执行语句*/
……
/*结果集处理*/SQLDisconnect(hdbc); /*断开数据源*/SQLFreeStmt(hstmt,SQL_DROP)/*释放一个语句句柄*/SQLFreeConnect(hdbc); /*释放一个连接句柄*/SQLFreeEnv(henv); /*当应用完成后,释放环境句柄*/}SQL语句的执行2.有准备地执行SQL语句的函数(1)SQL语句预备函数
SQLPrepare(hstmt,szSqlStr,cbSqlStr)
其中,参数hstmt是一个有效的语句句柄,参数szSqlStr和cbSqlStr分别表示将要执行的SQL语句的字符串及其长度。(2)SQL语句执行函数
SQLExecute(hstmt) 其中参数hstmt是一个有效的语句句柄。查询结果的获取(1)移动光标函数 SQLFetch(hstmt)该函数的功能是把光标移到下一行。(2)读光标指向行中一列值的函数SQLGetData(hstmt,icol,fCType, rgbValue,cbValueMax,pcbValue)查询结果的获取例10.2在例10.1程序的中间省略部分“……”插入下面一段语句,执行读查询结果集中的数据。while(RETCODE_IS_SUCCESSFUL(retcode)){retcode=SQLFetch(hstmt);if(RETCODE_IS_SUCCESSFUL(retcode){do{rcGetData=SQLGetData(hstmt,1, SQL_C_CHAR,szBuffer, sizeof(szBuffer),&cbValue); DISPLAY_MEMO(szBuffer,cbValue);/*显示*/ }while(rcGetData!=SQL_NO_DATA_FOUND);}}ODBC的符合性级别API符合性的三个级别SQL符合性的三个级别ODBCAPI与SQLCLI之间的协调SQLCLI与嵌入式SQL的比较SQLCLI的应用ODBC的符合性级别ODBC问题:有的SQL功能在某厂商的DBMS上没有实现,则ODBC就不可能为应用程序完成这一功能;有的SQL功能是SQL标准新增加的,而DBMS厂商没有及时跟上,则ODBC同样也无法完成新功能。对于具体DBMS不支持的SQL功能,DBMS要通报给应用程序。从ODBC本身来讲,它最好支持完全的SQL,这样才能做到应用程序不用修改就可以访问不同的数据源。API符合性的三个级别
1.核心级API 核心级API有22个函数,包括了完成一个数据库应用程序所要做的所有必备的工作。2.1级API 1级API除包括核心级API22个函数外,还包括16个附加函数。3.2级API 2级API除包括核心级API22个函数和1级API16个函数外,还包括17个附加函数。SQL符合性的三个级别
SQL符合性级别不是对编程的限制,应用程序可以自由地使用各种SQL语句,如果DBMS不支持,则驱动程序会报告。SQL符合性级别有:最小级SQL,核心级SQL,扩展级SQL。ODBC定义了这三个级别的SQL语法兼容性,每一后继级别都建立在较低级别的基础上,它包括前一级别所支持的SQL语句,也增加了一些语句。ODBCAPI与SQLCLI 之间的协调MS公司于1991年11月提出了一个关于ODBC的体系结构,并在1992年发布了ODBC1.0规范,随后以SDK形式出版并发行了这种面向SQL的API。数据库公司国际财团SQLAccessGroup(SAG)和标准化组织X/Open在1992年联合出版了一个规范,该规范定义了调用级界面(CallLevelInterface,CLI)标准。1993年,MS公司推出了ODBC2.0规范,并于1994年出版了ODBC2.0SDK。MS在1998年出版的ODBC3.0规范中,作了一些修改,目的是更进一步接近SQL标准。SQL3(即SQL99)的第三部分介绍了SQL/CLI。
ODBCAPI与SQLCLI 之间的协调在ODBC3.0版本和SQL/CLI中,都建议用户:废弃三个分配函数SQLAllocEnv、SQLAllocConnect和SQLAllocStmt, 而只使用一个函数SQLAllocHandle,废弃三个释放函数SQLFreeEnv、SQLFreeConnect和SQLFreeStmt, 而只使用一个函数SQLFreeHandle。SQLCLI与嵌入式SQL 的比较与嵌入式SQL相比,SQLCLI有下列四个优点:(1)标准化、通用化。将数据源的差异屏蔽在驱动程序实现之中,改善了应用程序的可移植性。(2)能支持应用程序并发访问不同数据源或同一数据源。对于不同的访问有不同的连接句柄,彼此不会干扰。(3)免除了预编译步骤,省去了说明游标和操作游标的语句,不需要说明主变量,应用程序中任何变量都可以和数据源交换数据。(4)对访问数据源的每一步骤,在执行时都提供相应的诊断信息,便于调试;而在嵌入式SQL中,只有在访问结束时才提供诊断信息。SQLCLI与嵌入式SQL 的比较在嵌入式SQL中,SQL函数是编译执行,比起从DLL动态调用执行,性能要好。但对于访问多数据源或数据源变化大的应用程序,选用SQLCLI无疑是上策。SQLCLI为应用程序访问数据源提供了一个标准接口,目前已为工业界和用户广泛接受。在20世纪90年代,为了比较系统地解决分布异构环境下的计算、互操作、互访问等系统集成问题,相继出现了以对象为基础的分布对象计算模型,其中著名的有COM/DCOM(ComponentObjectModel/DistributedCOM),CORBA(CommonObjectRequestBrokerArchitecture)和JavaBeans。这三个模型已在工业界流行,并且成为工业标准或事实上的工业标准,可望逐步发展成为国际标准。SQL/CLI的应用API是微软公司ODBC技术的术语,是非SQL名称。在SQL标准中,称为“调用层接口”(CallLevelInterface,简记为CLI)。SQL/CLI是ODBC技术的延续。下面介绍SQL/CLI的使用,用C语言作为宿主语言。CLI定义了一套可以从宿主语言调用的公共函数,每一个函数具有一个名称和一个要求的算法(当使用这个函数调用时,DBMS应该做什么)。在SQL3的第三部分介绍了SQL/CLI。SQL/CLI的应用使用SQL/CLI时,有必要将宿主程序与数据库交互的有关信息记录在运行时数据结果中。此信息保存在以下四种类型的记录中,表示为C数据类型中的复合结构(Struct):●环境记录(EnvironmentRecord):用作为一个容器,设置环境信息,以保存一个或多个数据库连接。●连接记录(ConnectionRecord):保存一个特定数据库连接所需的信息,表示应用系统与数据源之间的连接。●语句记录(StatementRecord):保存一个SQL语句所需的信息。●描述记录(DescriptionRecord):保存元组或参数的有关信息,如元组中的属性个数及其类型,或某个函数调用中的参数个数及其类型。SQL/CLI的应用若要创建记录,需要使用如下SQL/CLI函数:
SQLAllocHandle(<handle_type>,<handle_1>, <handle_2>)函数中参数的含义如下:<handle_type>指示所创建记录的类型。此参数可能的 值为关键字SQL_HANDLE_ENV、 SQL_HANDLE_DBC、SQL_HANDLE_STMT、 SQL_HANDLE_DESC。<handle_1>指示了新句柄在哪个容器中创建。<handle_2>是指向新创建的<handle_type>类型记录的 指针(句柄)。SQL/CLI的应用例10.3下面的程序段是读取(输入)某学生的学号,然后查询关系S,并打印该学生的姓名和年龄。
0)#includesqlcli.h; 1)voidprintAge(){ 2)SQLHSTMTstmt1; 3)SQLHDBCcon1; 4)SQLHENVenv1; 5)SQLRETURNret1,ret2,ret3,ret4; 6)ret1=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&env1); 7)if(!ret1)ret2=SQLAllocHandle( SQL_HANDLE_DBC,env1,&con1)elseexit;SQL/CLI的应用 8)if(!ret2)ret3=SQLConnect(con1,〞dbs〞, SQL_NTS,〞js〞,SQL_NTS, 〞xyz〞,SQL_NTS)elseexit;9)if(!ret3)ret4=SQLAllocHandle( SQL_HANDLE_STMT,con1,&stmt1)elseexit; 10)SQLPrepare(stmt1,〞selectSNAME,AGEfromS whereS#=?〞,SQL_NTS); 11)prompt(〞EnteraStudentNumber:〞,s#); 12)SQLBindParameter(stmt1,1,SQL_CHAR,&s#,5, &fetchlen1); 13)ret1=SQLExecute(stmt1);SQL/CLI的应用
14)if(!ret1){ 15) SQLBindCol(stmt1,1,SQL_CHAR,&sname, 9,&fetchlen1); 16) SQLBindCol(stmt1,2,SQL_SMALLINT,&age, 2,&fetchlen2); 17) ret2=SQLFetch(stmt1); 18) if(!ret2)printf(s#,sname,age); 19) elseprintf(〞TheStudentNumberdosnot exist: 〞,s#); 20) } 21)}SQL/CLI的应用例10.4下面的程序段先读取(输入)一个年龄值,然后检索符合这个年龄的学生。接着用一个循环处理各个学生记录,并打印各学生的姓名和性别。
0)#includesqlcli.h; 1)voidprintAgeStudents(){ 2)SQLHSTMTstmt1; 3)SQLHDBCcon1; 4)SQLHENVenv1; 5)SQLRETURNret1,ret2,ret3,ret4; 6)ret1=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&env1); 7)if(!ret1)ret2=SQLAllocHandle( SQL_HANDLE_DBC,env1,&con1)elseexit;SQL/CLI的应用
8)if(!ret2)ret3=SQLConnect(con1,〞dbs〞, SQL_NTS,〞js〞,SQL_NTS, 〞xyz〞,SQL_NTS)elseexit; 9)if(!ret3)ret4=SQLAllocHandle( SQL_HANDLE_STMT,con1,&stmt1)elseexit; 10)SQLPrepare(stmt1,〞selectSNAME,SEXfromS whereAGE=?〞,SQL_NTS); 11)prompt(〞EnteraAge:〞,age); 12)SQLBindParameter(stmt1,1,SQL_SMALLINT, &age,2,&fetchlen1); 13)ret1=SQLExecute(stmt1);SQL/CLI的应用
14)if(!ret1){ 15) SQLBindCol(stmt1,1,SQL_CHAR,&sname, 9,&fetchlen1); 16) SQLBindCol(stmt1,2,SQL_CHAR,&SEX, 2,&fetchlen2); 17) ret2=SQLFetch(stmt1); 18) while(!ret2){19) printf(sname,sex); 20) ret2=SQLFetch(stmt1); 21) } 22) } 23)}JDBCJDBC简介JDBC驱动类型JDBCAPIJDBC的发展JDBC简介Java于1995年5月正式公布,数据库应用程序中,没有一个Java语言的API,编程人员不得不在Java程序中加入C语言的ODBC函数调用。很多Java的优秀特性无法充分发挥平台无关性面向对象特性JDBC是为在JavaApplet和应用程序中访问关系数据库而设计的API类。JDBC独立于平台和数据库。在JDBC规范中,提供了SQL数据库访问的JAVA方法。JDBC应用框架JDBC两层模型JDBC三层模型JDBC与ODBCODBCAPI是C的库函数,在JAVA程序中不能直接使用。非面型对象大量指针因为语言本身的差异,不能将ODBCCAPI逐字翻译为JAVAAPI。使用JDBC使应用程序保持“纯JAVA”的可移植性等。JDBC驱动类型Java应用程序JDBC驱动管理器JDBC网络驱动JDBC-ODBC桥ODBC和数据库驱动数据库驱动A数据库驱动B专用数据库协议JDBC中间协议JDBCAPIJDBC驱动APIJDBC实现JDBC驱动类型JDBC-ODBC桥(JDBC-ODBCbridge)JDBC调用ODBCLibaryODBCDriverDatabase
。要求ODBC代码、client端代码都要在客户机上安装适合企业网,但由于效率较低不适合大量数据访问的应用,也不适合Internet应用,因为不能要求所有客户都安装ODBC。问题:Java应用程序具有平台相关性,安全性降低,可移植性差。JDBC驱动类型本地API驱动:把客户机API上的JDBC调用转换为Oracle、Sybase、DB2等DBMS本地API调用执行效率高于JDBC-ODBC桥JDBC调用数据库的Client端API,也需要在客户机上安装代码。不适合InternetJDBC驱动类型网络协议完全JAVA驱动:Application>JdbcDriver>javamiddleware>JDBCDriver>Databasejdbc先把对数局库的访问请求传递给网络上的中间件服务器中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用传给数据库服务器果中间件服务器也是用java开发的,那么在在中间层也可以使用1,2型jdbc驱动JDBC驱动类型网络协议完全JAVA驱动:驱动是基于server的,不需要在客户端加载数据库厂商提供的代码库,可以设计的很小,多了一个中间层传递数据,它的执行效率还不是最好JDBC驱动类型本地协议完全JAVA驱动JDBC调用直接转换为DBMS所使用的网络协议的请求Application>Jdbc>databaseengine>database驱动完全由java实现,实现了平台独立性效率最高适合Internet上单一数据库的工作组情形JDBCAPI功能建立与数据库的连接发送SQL语句处理结果JDBCAPI类类型 JDBC类驱动程序管理Java.sql.Driverjava.sql.DriverManagerjava.sql.DrivePropertyInfo数据库连接Java.sql.ConnectionSQL语句java.sql.Statementjava.sql.PreparedStatementjava.sql.CallableStatement数据java.sql.ResultSet错误java.sql.SQLExceptionjava.sql.SQLWarningJDBC类层次驱动程序管理器连接连接连接语句语句可调用语句准备语句executeUpdate()executeQuery()execute()getMoreResults()结果组元数据
数据getResultsSet()……建立与数据库的连接驱动程序管理Java.sql.Driver:每个数据库驱动程序类都要实现的接口Java.Sql.DriverPropertyInfo:驱动程序和连接建立需要的特性Java.sql.DriverManager:提供驱动程序需要的服务,包括加载驱动程序,驱动相应驱动程序建立连接等从系统属性java.sql中读取Driver的类名,并一一注册。在程序中使用Class.forName()方法动态装载并注册DriverDriverManager.getConnection()与数据库建立连接传送SQL语句在数据库连接上创建Statement对象,将各种SQL语句发送到所连接的数据库。Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(“SELECTa,b,cFROMTable1”);对于多次执行但参数不同的SQL语句,可以使用PreparedStatement对象。使用CallableStatement对象调用数据库上的存储过程。处理结果集结果集是查询语句返回的数据库记录的集合。在结果集中通过游标(Cursor)控制具体记录的访问。SQL数据类型与JAVA数据类型的转换根据SQL数据类型的不同,使用不同的方法读取数据。/*处理结果集rs*/while(rs.next()){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美丽宝鸡考试题及答案
- 企业商标保护课件教学
- 长期税务筹划方案
- 跟踪审计实施方案
- 车辆抵押担保解除合同范本
- 消防项目维保方案
- 党课宣传课件图片大全
- 言语康复家长培训
- 油厂设计方案模板
- 2026版《全品高考》选考复习方案物理01 第9讲 曲线运动 运动的合成与分解 含答案
- 工业园区物业服务标准化方案
- 煤矿工伤预防培训课件
- 物业保洁员礼节礼貌培训
- 2024年华东电网考试题库
- 演讲比赛评分表和计分表
- 2024年粮油仓储管理员理论知识竞赛理论考试题库500题(含答案)
- 24年-注安建筑-必背简答题
- 事业单位考试(公共基础知识)3000题每日练习021
- 流浪的纸飞机让压力飞
- 财务经理招聘笔试题及解答(某大型央企)
- 2024年新北师大版七年级上册数学全册课件(新版教材)
评论
0/150
提交评论