版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ch7JSP程序访问数据库第一页,共42页。6.1JDBC简介6.1.1从ODBC到JDBC的发展6.1.2JDBC技术概述6.1.3JDBC的体系结构6.1.4JDBC与ODBC的对比6.1.5数据库应用的模型6.1.6JDBC驱动程序的类型6.1.7JDBC的结构
第二页,共42页。6.1.1从ODBC到JDBC的发展1.ODBC简介OpenDataBaseConnectivity开放式数据库连接,微软的ODBC是用C编写的,而且只适用于Windows平台,无法实现跨平台地操作数据库需要通过不同的ODBC驱动进行连接第三页,共42页。1.ODBC工作原理首先,ODBC里必须安装相关数据库的驱动程序(“管理工具”--“数据源(ODBC)”)然后,通过建立一个数据源来指向该数据库最后,将应用程序中的SQL语句,通过ODBC数据库驱动器向DBMS发出请求,对分析或发自数据源的设计进行必要的翻译,并将结果返回给应用系统。第四页,共42页。2.JDBC的出现原因:如果Java编程人员通过调用ODBC,那么将造成Java程序的跨平台性受到很大的限制。1997.1JavaSoft公司宣布了JDBCAPI,这是一个标准SQL数据库访问接口。第五页,共42页。6.1.2JDBC技术概述JDBC是Java的开发者――Sun的Javasoft公司制定的JAVA数据库连接(JavaDataBaseConnectivity)技术的简称,是为各种常用数据库提供无缝连接的技术。它由一些Java语言编写的类和界面JDBCAPI为Java开发者使用数据库提供了统一的编程接口,它由一组Java类和接口组成。JDBCAPI使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。JDBCAPI的作用就是屏蔽不同的数据库驱动程序之间的差别,使得程序设计人员有一个标准的、纯Java的数据库设计接口第六页,共42页。6.1.2JDBC技术概述JDBC需要装载数据库驱动程序,但是这种驱动程序的装载是通过JDBCAPI类库中的类自动完成JDBC主要功能
(1)与一个数据库建立连接
(2)向数据库发送SQL语句
(3)处理数据库返回的结果JDBC是一种低级的API第七页,共42页。6.1.3JDBC体系结构JDBCAPI的作用就是屏蔽不同的数据库驱动程序之间的差别,使得程序设计人员有一个标准的、纯Java的数据库设计接口,为在Java中访问任意类型的数据库提供技术支持JDBCDriverManager则为应用程序加载数据库驱动程序数据库驱动程序是与具体的数据库相关的,用于向数据库提交SQL请求。第八页,共42页。6.1.4JDBC与ODBC的对比通过JDBC与ODBC的对比,从而体会JDBC的特点(1)ODBC是用C语言编写的,不是面向对象的;而JDBC是用Java编写的,是面向对象的。(2)ODBC难以学习,因为它把简单的功能与高级功能组合在一起,即便是简单的查询也会带有复杂的任选项;而JDBC的设计使得简单的事情用简单的做法来完成。(3)ODBC是局限于某一系统平台的,而JDBC提供Java与平台无关的解决方案。(4)但也可以通过Java来操作ODBC,这可以采用JDBC-ODBC桥接方式来实现(因为Java不能直接使用ODBC,即在Java中使用本地C的代码将带来安全缺陷)。第九页,共42页。6.1.5数据库应用的模型两层结构(C/S):在此模型下,客户端的程序直接与数据库服务器相连接并发送SQL语句(但这时就需要在客户端安装被访问的数据库的JDBC驱动程序),DBMS服务器向客户返回相应的结果,客户程序负责对数据的格式化。Client端
ODBC/JDBC
Server端(DBMS)或数据库专用协议
第十页,共42页。6.1.5数据库应用的模型三(或多)层结构(B/S):在此模型下,主要在客户端的程序与数据库服务器之间增加了一个中间服务器(可以采用C++或Java语言来编程实现),隔离客户端的程序与数据库服务器。客户端的程序(可以简单为通用的浏览器)与中间服务器进行通信,然后由中间服务器处理客户端程序的请求并管理与数据库服务器的连接。客户端程序
HTTPRMICORBA
中间服务器
JDBC
数据库服务器第十一页,共42页。
两层模型和三层模型
JDBCAPI既支持数据库访问的两层模型,也支持三层模型。
(1)两层模型
(2)三层模型第十二页,共42页。6.1.6JDBC驱动程序
流行的数据库如Oracle、SQLServer、mysql、Sybase和Informix都为客户访问提供了专用的API。有些厂商也专门提供数据库驱动程序,并且这些产品除了执行驱动的功能外,往往还提供一些额外的服务。有四种类型的数据库驱动程序,它们分别是:JDBC-ODBC桥;本地API;JDBC网络纯Java驱动程序纯Java驱动程序。下面分别介绍这些驱动程序。第十三页,共42页。第1类JDBC-ODBC桥JDBC-ODBC桥驱动程序为Java应用程序提供了一种把JDBC调用映射为ODBC调用的方法。因此,需要在客户端机器上安装一个ODBC和JDBC-ODBCbridge两种驱动程序。正如它的名字一样,JDBC-ODBC桥在JDBCAPI和ODBCAPI之间提供了一个桥梁,这个桥把标准的JDBC调用翻译成对应的ODBC调用,然后通过ODBC库把它们发送到ODBC数据源。这种方式有一个明显的缺点就是效率相对低下,现在的开发中已经很少使用这种方式。第十四页,共42页。第1类JDBC-ODBC桥通常不推荐使用这种桥驱动程序,但它可以减少开发人员进行企业开发的麻烦。优点:可以使用任何能够通过ODBC访问的数据库缺点:必须要Windows平台运行、执行效率低下第十五页,共42页。第2类本地API
包括java与自然代码,它与特定的DBMS的客户机网络软件通信JDBC驱动将标准的JDBC调用转变为对数据库API的本地调用,该类型的驱动程序是本地部分Java技术性能的本机API驱动程序在这种方式驱动程序和厂商专有的API必须在每个运行Java应用程序的客户端安装。现在大多数的数据库厂商都在其数据库产品中提供该桥驱动程序,这种使用方式比前一种方式有效。第十六页,共42页。第3类JDBC网络纯Java驱动程序
完全是用java编写的,向服务器组件发送数据库请求。这种方式使用一个中间数据访问服务器,通过这种服务器,它可以把Java客户端连接到多个数据库服务器上。传输这些请求协议不是任何数据库特定的,服务器组件负责将其变成相应格式后再将请求转发到特定DBMS优点:使用该类型的驱动程序是平台无关的,并且不需要客户端的安装和管理缺点:要求服务器方组件第十七页,共42页。第4类与DBMS直接连接4.纯Java驱动程序完全用java编写的,用这种服务器适合的协议直接与DBMS服务器通信。这种方式使用厂商专有的网络协议把JDBCAPI调用转换成直接的网络调用。优点:容易使用,只需要驱动器本身,可以方便地用java应用程序封装,而不需要其它的客户机/服务器方软件,简化应用程序的发布。第十八页,共42页。6.1.7JDBC的结构
JDBC主要包含两部分:面向Java程序员的JDBCAPI及面向数据库厂商的JDBCDriveAPI。(1)面向Java程序员的JDBCAPI:Java程序员通过调用此API从而实现连接数据库、执行SQL语句并返回结果集等编程数据库的能力,它主要是由一系列的接口定义所构成。java.sql.DriveManager:该接口主要定义了用来处理装载驱动程序并且为创建新的数据库连接提供支持。java.sql.Connection:该接口主要定义了实现对某一种指定数据库连接的功能。java.sql.Statement:该接口主要定义了在一个给定的连接中作为SQL语句执行声明的容器以实现对数据库的操作。它主要包含有如下的两种子类型。第十九页,共42页。6.1.7JDBC的结构java.sql.PreparedStatement:该接口主要定义了用于执行带或不带IN参数的预编译SQL语句java.sql.CallableStatement:该接口主要定义了用于执行数据库的存储过程的调用。java.sql.ResultSet:该接口主要定义了用于执行对数据库的操作所返回的结果集。(2)面向数据库厂商的JDBCDriveAPI:数据库厂商必须提供相应的驱动程序并实现JDBCAPI所要求的基本接口(每个数据库系统厂商必须提供对DriveManager、Connection、Statement、ResultSet等接口的具体实现),从而最终保证Java程序员通过JDBC实现对不同的数据库操作。第二十页,共42页。6.2JDBC的常用接口介绍
JDBC定义了许多接口和类,但是经常使用的却不是很多,在这里我们介绍这些常用的接口和类的使用,使初学者能够很快掌握JDBC数据库编程。第二十一页,共42页。DriverManagerConnectionStatementConnectionConnectionStatementStatementStatementResultsetResultsetResultsetJDBCAPI接口实现的功能第二十二页,共42页。6.2.1.Driver接口
每个数据库驱动程序必须实现Driver接口。我们在编程中要连接数据库,必须先装载特定厂商提供的数据库驱动程序(Driver),不同驱动程序的装载方法如下。如果使用JDBC-ODBCBridgeDriver,那么这样装载:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);如果使用JDBCDriver,那么这样装载:第二十三页,共42页。6.2.1.Driver接口
Class.forName(“jdbc.driver_class_name”);
//装载MSSQLServer驱动Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);//装载MySQLJDBC驱动Class.forName(“com.mysql.jdbc.Driver”);//装载OracleJDBC驱动Class.forName(“oracle.jdbc.driver.OracleDriver”);
第二十四页,共42页。6.2.2.DriverManager类的使用DriverManager(驱动程序管理器)类是JDBC(Java数据库连接)的管理层,作用于用户和驱动程序之间。DriverManager类跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。第二十五页,共42页。6.2.2.DriverManager类的使用DriverManager类的所有成员均为静态成员,因此,在应用程序中可以通过类名直接访问。DriverManager类需要预先知道数据库驱动程序的位置,否则无法使用,需要调用DriverManager类的registerDriver()方法来进行注册(新加载的Driver类都要通过调用DriverManager.registerDriver类进行自我注册)。在数据库驱动程序位置明确时,直接用:Class.forName(“驱动名称”);当驱动程序在DriverManager类中注册完成后,便可用来与数据库建立连接。调用DriverManager.getConnection()方法发出请求。第二十六页,共42页。DriverManager连接示例Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);//加载驱动程序Connectioncon=DriverManager.getConnection(“url”,”user”,”password”);第二十七页,共42页。6.2.3Connection类connection类是指向同一个数据库的连接。也就是在已经加载的Driver和数据库之间建立连接。您必须创建一个Connectionclass的实例,其中包括您的数据库的信息。作用:管理指向数据库的连接,如:向数据库发送查询和接收数据库的查询结果都是在它基础上的;完成同数据库的连接的所有任务之后关闭此连接。方法:
StatementcreateStatment():新建一个Statement对象,此对象可以向数据库发送查询信息
voidclose():关闭同数据库的连接并释放占有的JDBC资源
BooleanisClose():判断是否仍与数据库连接第二十八页,共42页。6.2.3Connection类DriverManager的getConnection()方法,将建立在JDBCURL中定义的数据库的Connection连接上:Connectionconn=DriverManager.getConnection(url,login,password);Connection接口是JSP编程中使用最频繁的接口之一。第二十九页,共42页。6.2.4Statement类Statement对象用于将SQL语句发送到数据库中,连接成功后,处理数据库中的查询。创建Statement对象
建立了到特定数据库的连接后,就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建。
Connectionconn=DriverManager.getconnection(url,user,password);
statementstmt=conn.createStatement();为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement的方法
ResultSetrs=stmt.executeQuery(“selecta,b,cfromtable2”);第三十页,共42页。Statement对象的操作使用Statement对象执行语句Statement接口提供了三种执行SQL语句的方法executeQuery:主要用于产生单个结果集的语句executeUpdate:主要用于执行insert\update\delete语句及SQL数据定义语句,来修改表中数据。返回值为一整数,表示数据库中被改变行的数目(即更新计数)。对于createtable或droptable等不操作行的sql数据定义语句,返回值为0Execute:用于执行返回多个结果集、多个更新计数或二者组合的语句第三十一页,共42页。主要方法
ResultSetexecuteQuery(Stringsql):返回一个静态的sql查询结果
intexecuteUpdate(Stringsql):查询一行sql声明中insert、update、delete的数目或返回0
voidclose():关闭同数据库的连接和所占有的JDBC资源第三十二页,共42页。6.2.5ResultSet类主要用于装载数据库查询的结果。ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。方法名称返回类型方法名称getByte(intcolumnIndex)bytegetByte(StringcolumnName)getDate(intcolumnIndex)DategetDate(StringcolumnName)getDouble(intcolumnIndex)doublegetDouble(StringcolumnName)getFloat(intcolumnIndex)floatgetFloat(StringcolumnName)getInt(intcolumnIndex)intgetInt(StringcolumnName)getLong(intcolumnIndex)longgetLong(StringcolumnName)getString(intcolumnIndex)StringgetString(StringcolumnName)第三十三页,共42页。6.3在JSP中与数据库建立连接6.3.1通过JDBC-ODBC桥来访问数据库6.3.2通过JDBCDriver来访问数据库第三十四页,共42页。6.3.2通过JDBC实现对数据库的访问具体操作第一步,引用必要的包
importjava.sql.*;
//它包含有操作数据库的各个类与接口
第二步,加载相应数据库驱动程序类这通常可以采用Class.forName()方法显式地加载一个驱动程序类,由驱动程序负责向DriverManager登记注册并在与数据库相连接时,DriverManager将使用此驱动程序。Class.forName(“数据库驱动程序”).newInstance();
第三十五页,共42页。第三步,创建要连接的数据库的url,格式:Jdbc:subProtocol:subName://hostname:port;DatabaseName=dbname其中,jdbc表示当前通过Java的数据库连接进行数据库访问;subProtocol表示通过某种驱动程序支持的数据库连接机制;subName表示在当前连接机制下的具体名称,hostname表示主机名;port表示相应的连接端口;DatabaseName是要连接的数据库的名称如:url="jdbc:oracle:thin:@localhost:1521:orcl";url=“jdbc:microsoft.sqlserver://localhost:1433;DatabaseName=mydb”;第三十六页,共42页。第四步,创建与数据源的连接利用DriverManager类中的getConnection()方法来建立与相应数据库的连接并返回一个Connection类的对象,以后对这个数据源的操作都是基于该Connection类对象;语法为:
Connectioncon=DriverManager.getConnection(url,user,passord);但对于Access等小型数据库,可以不用给出用户名与密码。
Connectioncon=DriverManager.getConnection(url);
System.out.println(con.getCatalog());//取得数据库的完整路径及文件名第三十七页,共42页。连接各种数据库方式速查表1、Oracle8/8i/9i数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();Stringurl="jdbc:oracle:thin:@localhost:1521:orcl";//orcl为数据库的SIDStringuser="test";Stringpassword="test";Connectionconn=DriverManager.getConnection(url,user,password);2、SqlServer7.0/2000数据库Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();Stringurl=“jdbc:microsoftqlserver://localhost:1433;DatabaseName=mydb”;//mydb为数据库Stringuser="sa";Stringpassword="";Connectionconn=DriverManager.getConnection(url,user,password);第三十八页,共42页。5、MySQL数据库Class.forName("com.mysql.jdbc.Driver");Connectionconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/austxj?useUnicode=true&characterEncoding=UTF-8","root",“");6、access数据库直连用ODBC的Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Stringurl="jdbc.odbc:Driver={MicroSoftAccessDriver(*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");Connectionconn=DriverManager.getConnection(url,"","");StatementstmtNew=conn.createStateme
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园教师心理健康支持体系构建研究-基于幼儿园教师心理援助计划实施数据分析
- 人教版(2024)七年级下册英语 Unit 1 Section A 教学设计
- 山东省济宁市兖州区2025-2026学年高二下学期期中考试英语试卷
- 妇女主任考试题及答案
- 2025年气象局事业单位招聘考试真题及答案
- 疏散指示系统施工方案(完整版)
- 2026年云南楚雄州广播电视编辑记者、播音员主持人资格考试(广播电视基础知识)考前冲刺试题及答案
- 安全验收评价服务合同
- 2026年政府采购代理机构从业人员考试自测试题及答案
- 公路照明施工方案
- 营养学第六章 矿物质
- SWITCH暗黑破坏神3超级金手指修改 版本号:2.7.4.84040
- 关于进一步激励干部在急难险重任务中担当作为有关具体措施的通知
- 浙江省消防技术规范难点问题操作技术指南(2020版)
- 建筑公司生产安全事故风险评估报告
- 《青蛙卖泥塘》课本剧
- GB/T 3179-2009期刊编排格式
- GB/T 28730-2012固体生物质燃料样品制备方法
- GB/T 24283-2018蜂胶
- TSG07-2019压力管道设计质量保证手册
- 安装与调试-4l手册accusine4ls用户指南
评论
0/150
提交评论