Java数据库连接主讲人宋鑫数据库应用模型两层结构(C/S结构)ClientDBServerODBC/JDBC数据库专用协议关系型数据库RDBMS--当前信息管理的主流技术•现状:IBMDB2、Oracle、SQLServer、SyBase、Informix、Access、MySQL等。•在关系数据库中:各数据项之间用关系来组织,关系(relationship)是表之间的一种连接,通过关系,我们可以更灵活地表示和操纵数据。数据库应用模型二层结构是中小企业基于局域网的数据库模型,其特点如下:①客户机程序直接向数据库服务器发送SQL请求,服务器返回相应的结果,执行速度快。②所有与访问数据库管理系统的操作都是在客户机应用程序中实现的,故称为胖客户端。维护和修改成本高。③受数据库厂家的限制,更换数据库管理系统时需要改写大量的客户端的原代码。④受数据库版本的限制,厂家更新数据库时,应用程序要重新编译和发布。数据库应用模型三层结构Client/BrowserWebApplicationServerhttp/RMICORBADBServer1DBServer2DBServer3数据库应用模型三层结构是Internet普遍使用的模式,具有如下特点:(1)应用客户端与数据库服务器不直接相连,各自的设计相互独立,DBMS更换后客户机不必修改程序。(2)密集任务的处理和数据操作放在服务器端,简化了客户机的设计,防止客户机的过于臃肿。(瘦客户机)(3)由专门的高性能服务器处理客户机的请求、与数据库进行通信,提高了数据库的访问效率。Java数据库连接J2EE服务器机器客户端应用程序动态HTML页面动态HTML页面JSP页面JSP页面EJBEJB数据库数据库数据库客户层Web层业务层EIS层客户端机器数据库服务器机器J2EE结构1J2EE结构2J2EE结构3Java数据库连接SQL语言简介JDBC概述数据库连接数据库语句结果集数据库连接池第一部分SQL语言简介什么是SQL语言SQL语言的使用方法SQL语言的组成SQL语言的数据类型SQLReviewSQL--StructuredQueryLanguageISOSQL-92标准常用SQL语句:定义DDLCREATE、ALTER、DROP、TRUNCATE操纵DMLINSERT、UPDATE、DELETE控制DCLGRANT、REVOKE检索SELECT事务处理COMMIT,ROLLBACK,SAVEPOINT什么是SQL语言StandardQueryLanguageStructuredQueryLanguageSQL语言的使用方法交互式SQL直接在数据库系统的界面上使用,一般只能进行简单的数据库操作嵌入式SQLSQL语言嵌入到一种高级语言中,可以对数据进行更为复杂的处理SQL语言的组成数据定义语言(DataDefinitionLanguage,简称DDL)查询语言(QueryLanguage,简称QL)数据操纵语言(DataManipulationLanguage,简称DML)数据控制语言(DataControlLanguage,简称DCL)SQL语言的数据类型基本类型SQL数据类型与描述Java数据类型整型TINYINT字长8位byteSMALLINT字长16位shortINTEGER字长32位intBIGINT字长64位long字符型CHAR(n)定长字符串,n为长度,当字符串长度不足n时,后面以空格填满StringVARCHAR(n)变长字符串,以实际长度进行存储,但最长不得超过nStringLONGCHAR长字符串String十进制数DECIMAL(m,n)十进制数,最少m位精度,小数点后n位java.math.BigDecimalNUMERIC(m,n)十进制数,最少m位精度,小数点后n位java.math.BigDecimal浮点数REAL单精度浮点数,字长32位floatFLOAT双精度浮点数,字长64位doubleDOUBLE双精度浮点数,字长64位double时间TIME格式为“hhmmss”,h、m、s分别代表时、分、秒。java.sql.TimeTIMESTAMP格式为:“yyyymmddhhmmssnnnnn”,y、m、d、h、m、s、n分别代表年、月、日、时、分、秒和微秒。java.sql.Timestamp日期DATE格式为“yyyymmdd”java.sql.DateSQL数据定义语言(DDL)数据定义语言是用于定义、撤消和修改数据模式的SQL语言DDL的动词CREATEDROPALTERSQL数据定义语言(DDL)DDL中的语句数据模式对象创建删除修改概念模式基表CREATETABLEDROPTABLEALTERTABLE外模式视图CREATEVIEWDROPVIEW内模式索引CREATEINDEXDROPINDEXSQL数据定义语言(DDL)创建基表CREATETABLEstudent(idCHAR(4)NOTNULL,nameCHAR(10)NOTNULL,sexCHAR(2)DEFAULT„男‟,ageCHAR(3)NOTNULL,gradeCHAR(1)DEFAULT„3‟,PRIMARYKEY(id));SQL数据定义语言(DDL)创建视图CREATEVIEWstu-index(id,name)ASSELECTid,nameFROMstudentWHEREgrade=3GROUPBYid;SQL数据定义语言(DDL)删除基表DROPTABLEstudent删除视图DROPVIEWstu-indexSQL数据定义语言(DDL)修改基表SQL未提供删除列的命令,若要删除列,必须先定义一个新表,再删除原来的表ALTERTABLEstudentADDmathchar(3);ALTERTABLEstudentDROPPRIMARYKEY;SQL查询语言(QL)SELECT子句FROM子句WHERE子句GROUPBY子句ORDERBY子句SQL查询语言(QL)SELECT*FROMstudent;SELECTid,nameFROMstudentWHEREgrade=3ORDERBYid;SQL数据操纵语言(DML)INSERTINTO语句作用是向基表中插入一条新记录INSERTINTOstudent(id,name,age)VALUES(„1‟,„王平‟,‟18‟);DELETE语句作用是从基表中删除一条记录,不能删除列DELETEFROMstudentWHEREgrade=3;UPDATE语句作用是用新值来更新已有的数据记录UPDATEstudentSETgrade=3WHEREgrade=2ANDavg=60;SQL数据控制语言(DCL)授权语句GRANTCONNECT|RESOUSE|DBATO收回授权REVOKECONNECT|RESOUSE|DBAFROM第二部分JDBC概述JDBC的功能支持基本SQL语句,在Java程序中实现数据库操作功能并简化操作过程;提供多样化的数据库连接方式;通用的JavaAPI,提供多样化的数据库连接方式,为各种不同的DBMS提供统一的操作接口。JDBC的两种主要接口JDBC主要有两种接口:面向上层的:程序开发人员的JDBCAPI.•JDBCAPI使用一系列抽象的接口,它使得应用程序员能够进行数据库连接,执行SQL声明,并且得到返回结果.面向底层的:JDBCDRIVER(驱动程序)SPI.•JDBCDriverAPI是面向驱动程序开发商的编程接口,对于大多数数据库驱动程序来说,仅仅实现JDBCAPI提供的抽象类就可以了.JDBC工作原理JavaApplicationJDBCManagerJDBC-NetDriverJDBC-ODBCBridgeDriverDriverADriverBODBCandDBDriverDataBase1DataBase2DataBase3DataBase4JDBCAPIJDBCDriverAPIJDBC与ODBC在Java程序中对数据库进行访问时,采用的接口是JDBCAPI。尽管Sun公司一再强调JDBC只是一个商标而已,但目前大多数人仍然认为JDBC是JavaDatabaseConnectivity的首字母简写。它与微软的ODBC(OpenDataBaseConnectivity)不仅形似,而且还有几分神似,因为它们都是在SQL/CLI规范的基础上开发出来的。SQL/CLI规范应用程序驱动程序管理器驱动程序数据库二、JDBC的结构DriverManagerJDBC驱动程序CallabelStatementPreparedStatemetStatementResultSet数据库JDBCAPIDriverManagerConnectionStatementPreparedStatementCallableStatementResultSet驱动程序加载驱动Class.forNamegetConnection方法createStatementprepareStatementprepareCall三、JDBC驱动程序数据库驱动程序是用来解决应用程序与数据库通信问题的。JDBC是一个面向Java开发人员的类似于ODBC的数据库访问接口。JDBC驱动程序有4种类型。JDBC驱动模式Type1:JDBC-ODBC桥驱动模式Type2:本地接口与Java驱动程序相结合的驱动模式Type3:面向数据库中间件的驱动模式Type4:直接连接的驱动模式DriverType1JDBC-ODBCBridge此种驱动程序也称为JDBC-ODBC桥驱动,它是把JDBC操作翻译成对应的ODBC调用。它的优点是可以访问ODBC能访问的所有数据库,缺点是执行效率比较低。应用程序(Java)类型一JDBC驱动程序ODBC驱动程序网络库数据库DriverType2native-APIpartly-Javadriver本地库Java驱动程序,将JDBC调用转化为对相关数据库API的调用。这意味着必须在客户端上提供本地库。在Oracle中是OCI库。类型(2)性能比(1)要高,但更依赖于数据库厂商。应用程序(Java)类型二JDBC驱动程序网络库数据库DriverType3net-protocolall-Javadriver(JDBCProxy)独立于DBMS的网络协议(网络桥)纯Java驱动程序,支持三层结构的JDBC访问。将JDBC调用转化为独立于特定数据库的网络协议。一般由应用服务器提供商集成到应用服务器中,如BEAWebLogic。客户端不必安装本地库,Java程序可灵活与各种类型的数据库进行通信。DBMS接口的配置需要由中间件服务器进行转化,但性能与第四种相当。DriverType4native-protocolall-Javadriver本地协议完全Java驱动程序,将JDBC调用转化为特定数据库的网络协议。直接把数据库调用发送到DBMS,性能很高。但是只能与该厂商的DBMS进行连接。如Oracle。比较:•类型(3)相对于厂商更独立•类型(4)性能更高。应用程序(Java)类型四JDBC驱动程序数据库Oracle提供的JDBC驱动程序ThinJDBC:100%PureJava平台无关,可以在Applet中使用。是第(4)类驱动,只支持TCP/IP协议,不需要安装Oracle客户机。要建立一个数据库的连接,必须启动TNSListener,并对服务器上的TCP/IP套接字进行监听。此驱动最常用。四种驱动程序总结第三种和第四种类型的驱动程序是发展方向。Sun公司在Internet上提供了一个JDBC驱动程序目录,网址是。JDBCAPI调用流程关系图JDBC编程步骤1.注册驱动程序2.创建数据