您好,欢迎访问三七文档
J2EE与中间件技术——JDBC/JTAJDBC技术JDBC——Java数据库连接(JavaDataBaseConnectivity)技术ODBC——开放式数据库连接使用针对于数据库的驱动程序,提供一组用于访问任何数据库的APIJDBC驱动程序JDBC规范支持的产品:把基于JDBC的应用程序中的调用规则映射为针对于数据库的正确调用——JDBC驱动程序访问特定类型的数据库:必须使用该数据库特定的JDBC驱动程序由数据库供应商提供JDBCAPIJava环境提供了创建能与数据库交互作用的Java应用程序所必须的JDBCAPI,将Java命令转换为SQL语句JDBCAPI:由一组类和接口定义的方法构成,为Java开发人员提供了一个行业标准API,提供了数据库的调用层接口JavaDatabaseConnectivityAPITheJavaDatabaseConnectivity(JDBC)APIletsyouinvokeSQLcommandsfromJavaprogramminglanguagemethods.YouusetheJDBCAPIinanenterprisebeanwhenyouhaveasessionbeanaccessthedatabase.YoucanalsousetheJDBCAPIfromaservletoraJSPpagetoaccessthedatabasedirectlywithoutgoingthroughanenterprisebean.JavaDatabaseConnectivityAPITheJDBCAPIhastwoparts:anapplication-levelinterfaceusedbytheapplicationcomponentstoaccessadatabase,andaserviceproviderinterfacetoattachaJDBCdrivertotheJavaEEplatform.JDBC技术实现Java程序与数据库之间的交互Java程序调用JDBCAPI的方法;JDBC驱动程序将调用转换为数据库可以理解的形式;执行操作,JDBC驱动程序从数据库得到结果,将结果转换为JDBCAPI类;Java程序得到结果。JDBC的作用开发人员只需了解一组API,就可以访问任何关系数据库不必为不同的数据库重新编写代码不必了解数据库供应商的特定API几乎每个数据库供应商都具有几种类型的JDBC驱动使用JDBC读取数据建立数据库连接:使用DriverManager机制或DataSource机制向数据库提交查询请求读取查询结果处理查询结果释放连接JDBCAPI两个程序包:java.sql核心API——DriverManager机制javax.sql可扩展API——DataSource机制DatabaseJavaApplicationJDBCDriverManagerJDBC-ODBCBridgeVendorSpecificJDBCDriverVendorSpecificODBCDriverJDBCAPIJDBCDriverAPIDatabaseJDBC驱动程序类型四种类型Type1:JDBC-ODBCBridgeType2:Native-APIPartlyJavaType3:Net-ProtocolFullyJavaType4:Native-protocolFullyJavaJDBC-ODBC桥把JDBCAPI映射成ODBCAPI,借用现成的ODBC驱动程序sun.jdbc.odbc.JdbcOdbcDriverJDBC-ODBC桥优点:允许访问几乎任何数据库(特别是没有提供JDBC驱动程序的)缺点:性能比单独的JDBC驱动慢;丧失了Java的跨平台特性;不能用在Internet上(ODBC驱动必须安装在每个客户机上);不适合大型应用程序Native-APIPartlyJava将JDBCAPI调用映射为针对数据库的客户端API优点:性能比JDBC-ODBC桥好缺点:需要为每台客户机上加载供应商数据库库文件/特殊协议(如OracleSQLNet),不能用在Internet上Net-ProtocolFullyJava支持三层结构的JDBC访问方式,将JDBC调用转化为与DBMS无关的网络协议(如HTTP),再由中间层服务器转化为DBMS使用的协议不需要在客户机上安装任何供应商数据库库文件;最优的可移植性、性能和可缩放性;用在因特网应用程序中数据来自后端服务器,查看记录集所需的时间长Native-ProtocolFullyJava纯JAVA:直接将JDBC调用转化为DBMS使用的网络协议,允许从客户机上直接调用DBMS服务器比类型3快,用在因特网应用程序中与平台无关MySQLLab-Tomcat-2.pptmysql-connector-java-5.*.*-bin.jarDriverManager机制使用DriverManager、Driver和Connection连接到数据库上:java.sql.DriverManager类:了解驱动的信息,维护驱动实现的列表,向应用程序提供一个驱动实现java.sql.Driver接口:DBMS供应商提供的驱动必须实现Driver接口,处理JDBC语句,把包含的SQL参数发送给数据库引擎java.sql.Connection接口:把一系列SQL语句发送给数据库,管理这些语句的提交或中断DriverManager机制1.注册驱动程序隐式注册:加载数据库驱动程序类(把驱动加载到内存中),自动向DriverManager注册Class.forName(“JDBCDriverName”);显示注册:DriverManager.registerDriver(newJDBCDriverName());DriverManager机制2.建立数据库连接:Connectioncon=DriverManager.getConnection(URL,username,password);//按照注册顺序,找到第一个可以成功连接到给定URL的驱动程序,返回一个Connection对象JDBCURL的语法:jdbc:driver:databasename3.使用连接进行查询、插入、删除的操作DriverManager机制DriverManager机制的弊端:是一个同步的类,一次只有一个线程可以运行与数据库相关的连接信息都包含在类中,如果用户更换另一台计算机作数据库服务器,就需要重新修改URL变量、重新编译、部署;用户的用户名、口令也包含在类中,丧失了安全性DataSource机制——JNDI注册到JNDI,使用JNDI服务向程序隐藏了登录细节:Java命名和目录接口(JavaNamingandDirectoryInterface),为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。(中央注册中心,储存了各种对象、用户和应用的变量及其值,开发大型的分布式应用,使分布式的Java程序找到分布式的对象)JNDI分布式应用程序:通过RMI或CORBA向JNDI注册对象,其他任何客户机上的应用程序只需知道数据源对象在服务器JNDI中的逻辑名称,就可以通过RMI向服务器查询数据源,然后与数据库建立连接DataSource机制——连接池ApplicationServer启动时,创建通向数据库资源的连接池。连接池包含多个JDBC连接。当应用程序需要访问数据库时,从连接池中取得一个连接,使用该连接与数据库通信;一旦工作完成,关闭数据库连接,释放回连接池中。数据库连接池连接到数据库:需要通信、内存、授权等来创建连接,代价昂贵对于访问站点的每一个客户机都建立了一个新的连接,费用太高连接池:重用连接,而非建立新连接一组加载到内存中的数据库连接,以便重复使用允许共享数据库连接,不是为每个客户分别提供单独的连接借助连接池,对连接数量进行必要的定量限制,数据库才是最有效的。DataSource机制DataSource是JDBCConnection对象的一个工厂允许使用已经在JNDI命名服务中注册的DataSource对象建立连接,由驱动程序供应商实现配置Tomcat数据源Lab-Tomcat-2.pptDataSourceJNDIName:jdbc/abcdefds或context.xml文件(简单)JNDIAPIjavax.naming程序包JNDIAPI:定义了InitialContext类,有助于找到整个过程的起点DataSource机制1.查询数据源对象Contextctx=newInitialContext();DataSourceods=(DataSource)ctx.lookup(DataSourceJNDIName);2.获取数据库连接(javax.sql.DataSource类的工厂方法)ods.getConnection();3.进行数据库操作(与DriverManager机制相同)……与数据库交互(Statement)与数据库的交互是由java.sql.Statement类完成的利用Connection对象,创建一个Statement对象:Statementstmt=con.createStatement();与数据库的交互(ResultSet)执行SQL语句stmt.execute(“任何有效的SQL查询语句”);利用java.sql.ResultSet类(结果集),返回查询结果ResultSetrs=stmt.getResultSet();快捷方法ResultSetrs=stmt.executeQuery(“SQL查询语句”);ResultSet把数据库中的数据映射为Java对象的实例;参考数据库驱动程序文档ResultSetResultSet对象拥有一个指向当前数据行的指针,开始,这个光标定位到第一个数据行之前的位置读取查询结果next()方法把光标移动到下一行,当ResultSet对象没有更多的数据行时,next()方法返回falseResultSetgetString(StringColumnName)方法读取Resultset对象当前行中指定列名的字符串值absolute(introw)方法把光标移到Resultset对象的指定行上beforeFirst()方法把光标移到Resultset对象的起始位置isAfterLast()方法光标是否位于Resultset对象的最后一行之后ResultSetisBeforeFirst()方法光标是否位于Resultset对象的第一行之前isFirst()方法光标是否位于Resultset对象的第一行isLast()方法光标是否位于Resultset对象的最后一行refreshRow()方法使用数据库中的最新值刷新当前行close()完成查询之后,依次释放ResultSet对象,Statement对象,Connection对象调用close()方法实现myJDBCReadServlet.java查询数据库,返回结果的Servlet把只需执行一次的代码放在初始化阶段Contextctx;DataSourceds;Statementstmt;ResultSetrs;publicvoidinit(){ctx=newInitialContext();ds=(DataSource)ctx.lookup(java:comp/env/jdbc/abcdefds);}Tomcat数据源固定格式myJDBCReadServlet.
本文标题:3JDBC
链接地址:https://www.777doc.com/doc-2975475 .html