艾普特网络工作室的数据库编程的数据库编程的数据库编程的数据库编程((((JDBC))))术术术术第一节第一节第一节第一节JDBC概述概述概述概述JDBC(JavaDataBaseConnectivity,Java数据库连接技术)是Java访问数据库资源的标准,JDBC标准定义了一组JavaAPI,允许我们写出SQL语句,然后交给数据库。有了JDBC从而可以使Java程序员用Java语言来编写完整的数据库方面的应用程序。另外也可以操作保存在多种不同的数据库管理系统中的数据,而与数据库管理系统中数据存储格式无关。同时Java语言的与平台的无关性,不必在不同的系统平台下编写不同的数据库应用程序。一一一一、、、、为什么采用为什么采用为什么采用为什么采用JDBCJDBC可以说是最老的企业Java规范之一,最早的起草日期要追溯到1996年,JDBC与微软开发的开放数据连接(OpenDatabaseConnectivity,ODBC)标准具有同样的功能,它提供一组通用的API,通过数据库特定的驱动程序来访问数据库。如果没有JDBC或者ODBC,开发人员必须使用不同的一组API来访问不同的数据库,而利用JDBC或者ODBC,则只需要使用一组API,再加上数据库厂商提供的数据库驱动程序就可以了。所以,利用JDBC,我们就可以把同一个企业级Java应用移植到另一个数据库应用上。JDBC设计的目的1)ODBC:微软的ODBC是用C编写的,而且只适用于Windows平台,无法实现跨平台地操作数据库。2)SQL语言:SQL尽管包含有数据定义、数据操作、数据管理等功能,但它并不是一个完整的编程语言,而且不支持流控制,需要与其它编程语言相配合使用。3)JDBC的设计:由于Java语言具有健壮性、安全、易使用并自动下载到网络等方面的优点,因此如果采用Java语言来连接数据库,将能克服ODBC局限于某一系统平台的缺陷;将SQL语言与Java语言相互结合起来,可以实现连接不同数据库系统,即使用JDBC可以很容易知识要点:第一节JDBC概述为什么采用JDBC、JDBC基本程序结构、JDBC的缺点、JDBC的工作原理、JDBC的结构、数据库应用的模型、通过JDBC实现对数据库的访问第二节创建与数据源的连接JDBC驱动程序、连接的一般方法、Access的连接应用、SQLServer2000的连接应用、MySQL的连接应用、Oracle的连接应用、DB2的连接应用、不同种类的数据库驱动程序配置第三节运用JDBC进行数据库操作查询数据库的一些结构信息、查询数据库中的数据、使用宏语句、使用存储过程、处理大二进制字段第四节事务处理为什么要处理事务、无事务的情况、事务处理的实例第五节游标操作ResultSet对象、游标操作的实例分析、更新数据库、插入操作、删除操作、批量操作艾普特网络工作室语句传送到任何关系型数据库中。4)JDBC设计的目的:它是一种规范,设计出它的最主要的目的是让各个数据库开发商为Java程序员提供标准的数据库访问类和接口,使得独立于DBMS的Java应用程序的开发成为可能(数据库改变,驱动程序跟着改变,但应用程序不变)。JDBC的主要功能:1)创建与数据库的连接;2)发送SQL语句到任何关系型数据库中;3)处理数据并查询结果。二二二二、、、、JDBC基本程序结构基本程序结构基本程序结构基本程序结构((((此结构有何问题此结构有何问题此结构有何问题此结构有何问题????如何解决如何解决如何解决如何解决?)?)?)?)Try((((Class.forName(sun.jdbc.odbc.JdbcOdbcDriver)做什么样的工作做什么样的工作做什么样的工作做什么样的工作?)?)?)?)//(1)加载连接数据库的驱动程序{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//(2)创建与数据库的连接Connectioncon=DriverManager.getConnection(jdbc:odbc:DatabaseDSN,Login,Password);//(3).查询数据库:创建Statement对象并执行SQL语句以返回一个ResultSet对象。发送SQL语句到数据库中Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(select*fromDBTableName);发送SQL语句到数据库中//(5)处理数据并查询结果。while(rs.next()){Stringname=rs.getString(Name);intage=rs.getInt(age);floatwage=rs.getFloat(wage);}//(6)关闭rs.close();stmt.close();con.close();}catch(SQLExceptione){System.out.println(SQLState:+e.getSQLState());System.out.println(Message:+e.getMessage());System.out.println(Vendor:+e.getErrorCode());}三三三三、、、、JDBCJDBCJDBCJDBC的缺点的缺点的缺点的缺点((((如何克服如何克服如何克服如何克服JDBCJDBCJDBCJDBC这样的缺点这样的缺点这样的缺点这样的缺点?)?)?)?)1)JDBC并不符合面向对象的要求,JDBC要求你明确地处理数据字段,并且将它们映射到关系数据库的表中。开发人员被迫与两种区别非常大的数据模型、语言和数据访问手段打交道:艾普特网络工作室,以及SQL中的关系数据模型。2)在开发中实现从关系数据模型到Java对象模型的映射非常复杂,以致于多数开发人员从不为数据定义对象模型,而是简单地编写过程化的Java代码来对底层的关系数据库中的数据表进行操纵。3)最终结果是:开发人员根本不能从面向对象的开发中得到任何好处。四四四四、、、、JDBC的工作原理的工作原理的工作原理的工作原理JDBC的设计基于X/OpenSQLCLI(调用级接口)这一模型。它通过定义出一组API对象和方法以用于同数据库进行交互。在Java程序中要操作数据库,一般应该通过如下几步(利用JDBC访问数据库的编程步骤):1)加载连接数据库的驱动程序Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);2)创建与数据源的连接Stringurl=jdbc:odbc:DatabaseDSN;Connectioncon=DriverManager.getConnection(url,Login,Password);3)查询数据库:创建Statement对象并执行SQL语句以返回一个ResultSet对象。Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(select*fromDBTableName);4)获得当前记录集中的某一记录的各个字段的值Stringname=rs.getString(Name);intage=rs.getInt(age);floatwage=rs.getFloat(wage);5)关闭查询语句及与数据库的连接(注意关闭的顺序先rs再stmt最后为con)rs.close();stmt.close();con.close();五五五五、、、、JDBC的结构的结构的结构的结构JDBC主要包含两部分:面向Java程序员的JDBCAPI及面向数据库厂商的JDBCDriveAPI。1))))面向面向面向面向Java程序员的程序员的程序员的程序员的JDBCAPI::::((((javaAPI中的各种类之间具体什么关系中的各种类之间具体什么关系中的各种类之间具体什么关系中的各种类之间具体什么关系????每个类的具体描述每个类的具体描述每个类的具体描述每个类的具体描述))))Java程序员通过调用此API从而实现连接数据库、执行SQL语句并返回结果集等编程数据Java的应用程序JDBCAPI接口JDBC驱动程序管理器JDBC驱动程序数据库管理系统.1.1.1.115-1艾普特网络工作室库的能力,它主要是由一系列的接口定义所构成。java.sql.DriveManager:该接口主要定义了用来处理装载驱动程序并且为创建新的数据库连接提供支持。java.sql.Connection:该接口主要定义了实现对某一种指定数据库连接的功能。java.sql.Statement:该接口主要定义了在一个给定的连接中作为SQL语句执行声明的容器以实现对数据库的操作。它主要包含有如下的两种子类型。java.sql.PreparedStatement:该接口主要定义了用于执行带或不带IN参数的预编译SQL语句。java.sql.CallableStatement:该接口主要定义了用于执行数据库的存储过程的雕用。java.sql.ResultSet:该接口主要定义了用于执行对数据库的操作所返回的结果集。2))))面向数据库厂商的面向数据库厂商的面向数据库厂商的面向数据库厂商的JDBCDriveAPI::::((((现在的数据库厂商除了提供现在的数据库厂商除了提供现在的数据库厂商除了提供现在的数据库厂商除了提供API接口之外接口之外接口之外接口之外,,,,有一些厂商还提供了有一些厂商还提供了有一些厂商还提供了有一些厂商还提供了DBMS端的缓冲端的缓冲端的缓冲端的缓冲))))数据库厂商必须提供相应的驱动程序并实现JDBCAPI所要求的基本接口(每个数据库系统厂商必须提供对DriveManager、Connection、Statement、ResultSet等接口的具体实现),从而最终保证Java程序员通过JDBC实现对不同的数据库操作。六六六六、、、、数据库应用的模型数据库应用的模型数据库应用的模型数据库应用的模型1))))两层结构两层结构两层结构两层结构((((C/S):):):):((((两层结构具体不好使用在两层结构具体不好使用在两层结构具体不好使用在两层结构具体不好使用在哪里哪里哪里哪里????具体的代码展示具体的代码展示具体的代码展示具体的代码展示))))在此模型下,客户端的程序直接与数据库服务器相连接并发送SQL语句(但这时就需要在客户端安装被访问的数据库的JDBC驱动程序),DBMS服务器向客户返回相应的结果,客户程序负责对数据的格式化。client端ODBC/JDBCServer端(DBMS)或数据库专用协议主要的缺点:受数据库厂商的限制,用户更换数据库时需要改写客户程序;受数据库版本的限制,数据库厂商一旦升级数据库,使用该数据库的客户程序需要重新编译和发布;对数据库的操作与处理都是在客户程序中实现,使客户程序在编程与设计时较为复杂。2))))三三三三((((或多或多或多或多))))层结构层结构层结构层结构((((B/S):):):):((((三层结构的好处在哪里三层结构的好处在哪里三层结构的好处在哪里三层结构的好处在哪里????JDBC在三层结构中所处的位置和所起的作用在三层结构中所处的位置和所起的作用在三层结构中所处的位置和所起的作用在三层结构中所处的位置和所起的作用,,,,以及现在对以及现在对以及现在对以及现在对JDBC的扩充和封装的扩充和封装的扩充和封装的扩充和封装))))在此模型下,主要在客户端的程序与数据库服务器之间增加了一个中间服务器(可以采用C++或Java语言来编程实现),隔离客户端的程序与数据库服务器。客户端的程序(可以简单为通用的浏览器)与中间服务器进行通信,然后由中间服务器处理客户端程序的请求并管理与数据库服务器的连接。艾普特