《第9章JDBC编程技术知识讲解》由会员分享,可在线阅读,更多相关《第9章JDBC编程技术知识讲解(91页珍藏版)》请在金锄头文库上搜索。
1、第9章 JDBC编程技术,9.1 JDBC概述 9.2 使用JDBC开发数据库应用 实训九 数据库应用程序开发 习题九,9.1 JDBC 概 述,9.1.1 JDBC的概念 数据库是收集、存储和组织数据常用的方法,大部分应用系统不可避免地需要访问数据库。由于数据库产品纷繁复杂,在一个公司甚至一个部门经常会出现多种数据库系统并存的情况。Java语言通过JDBC(Java DataBase Connection,Java 数据库连接)API提供了一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口。,由于目前几乎所有的关系数据库产品都支持SQL语言,开
2、发人员能够用相同的方法将SQL语句发送到不同的数据库系统,访问各种数据库系统。,JDBC出现前,Java Applet访问数据库只能通过Web服务器端的CGI程序进行(见图9.1),由CGI程序访问和操作数据库并得到结果,然后由Web服务器将结果返回到客户端。每一次访问Web服务器都会启动一个新的CGI进程与数据库建立连接,访问效率和速度都很低,且容易引入错误。而使用JDBC允许Java程序直接与数据库连接(见图9.2),将SQL命令发送给数据库服务器,大大提高了访问速度。,图9.2 Applet通过JDBC访问数据库,使用JDBC的Applet只能与它所在的Web服务器主机上的数据库服务器建
3、立连接,这是Applet访问数据库的安全性限制。 JDBC与数据库系统独立的API包含两部分,一部分是面向应用系统开发人员的JDBC API,另一部分是面向驱动程序开发人员的JDBC Driver API。Java程序通过JDBC API访问JDBC 驱动程序管理器(Driver Manager),驱动程序管理器再通过JDBC Driver API访问不同的JDBC驱动程序,从而实现对不同类型数据库的访问。,JDBC提供了一个通用的JDBC Driver Manager,用来管理各数据库软件商提供的JDBC驱动程序,从而访问其数据库。现在越来越多的数据库厂商都开始提供其数据库产品的JDBC驱动
4、程序,包括微软公司的SQL Server 2000。不过微软提供的驱动程序在Java Applet中使用时需要客户端修改策略文件,改变Java Applet缺省的安全性限制,因此,用它来开发在Internet上发布的应用系统并不好。,9.1.2 JDBC URL JDBC URL是JDBC用来标识数据库的方法,JDBC驱动程序管理器根据JDBC URL选择正确的驱动程序,由驱动程序识别该数据库并与之建立连接。实际上,驱动程序设计人员决定用什么JDBC URL来标识特定的驱动程序。用户无需关心如何来形成 JDBC URL,只需使用与驱动程序一起提供的URL即可。JDBC提供某些约定,驱动程序设计
5、人员构造JDBC URL时应该遵循这些约定。,由于JDBC URL要与各种不同类型的数据库驱动程序一起使用,因此这些约定应非常灵活。首先,它们应允许不同的驱动程序使用不同的方案来命名数据库。例如,odbc子协议允许URL含有属性值。 其次,JDBC URL应允许程序员将连接数据库所需的全部信息编入其中。这样就可以让Java程序直接打开数据库连接,而不需要最终用户去做任何系统管理工作。,第三,JDBC URL应允许某种程度的间接性。也就是说,JDBC URL可指向逻辑主机或数据库名,而这种逻辑主机或数据库名将由网络命名系统动态地转换为实际的名称。这可以使系统管理员不必将特定主机声明为JDBC名称
6、的一部分。网络命名服务(例如 DNS、NIS)有多种,而对于使用哪种命名服务并无限制。 JDBC URL的标准语法由三部分组成,各部分间用冒号分隔: jdbc:,三个部分可分解如下: jdbc:协议名。JDBC URL 中的协议总是 jdbc。 :驱动程序名或数据库连接机制(这种机制可由一个或多个驱动程序支持)的名称。例如,odbc用于指定ODBC数据源名称的URL的使用。下面的JDBC URL通过 ODBC驱动程序来访问某个数据库: jdbc:odbc:fred 这里,子协议为odbc,子名称fred是本地ODBC 数据源名。,:一种标识数据库的方法。子名称可以依不同的子协议而变化,使用子名
7、称的目的是为定位数据库提供足够的信息。子名称的格式可根据不同的子协议而变化。在上面的例子中,ODBC子协议只需数据源名就可以了,而对于远程服务器上的数据库往往需要更多的信息。例如,通过Internet访问SQL Server数据库服务器,则在 JDBC URL中应将网络地址作为子名称的一部分包括进去。如: jdbc:microsoft:sqlserver:/localhost:1433;User=sa;Password=;DatabaseName=DemoDB,9.1.3 JDBC-ODBC桥 ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结
8、构(Windows Open Services Architecture,WOSA)中有关数据库的一个组成部分。与JDBC类似,它建立了一组规范,并提供了一组对数据库访问的标准API,利用SQL来完成其大部分任务。,ODBC标准出现较早,目前几乎所有的数据库系统都提供ODBC驱动程序。Sun公司对没有提供相应JDBC驱动程序的数据库系统,开发了特殊的驱动程序:JDBC-ODBC桥,该驱动程序支持JDBC通过现有的ODBC驱动程序访问相应的数据库系统。 JDBC-ODBC桥子协议名为odbc,允许在子名称(数据源名称)后面指定任意多个属性值。odbc 子协议的完整语法为 jdbc:odbc:;=
9、*,这里,*表示可有多个属性。下面都是合法的 jdbc:odbc 名称: jdbc:odbc:qeor7 jdbc:odbc:wombat jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER jdbc:odbc:qeora;UID=kgh;PWD=fooey,9.2 使用JDBC开发数据库应用,9.2.1 一个完整的例子 程序9.1是一个采用JDBC-ODBC访问本地Access数据库的Java应用程序,演示了使用JDBC开发数据库应用的基本步骤。该程序连接到指定的数据源,然后检索表table1中的所有记录并输出。 运行程序9.1,首先应使用Ac
10、cess创建一个数据库,该数据库包含一个表table1,然后建立一个数据源AccessDB,连接到该数据库。,【程序9.1】 采用JDBC-ODBC访问本地Access数据库。 import java.sql.*; public class JDBCDemo static public void main(String args) JDBCDemo obj = new JDBCDemo(); obj.AccessDB(); ,Connection theConnection; /数据库连接 Statement theStatement; /发送到数据库执行的SQL命令 ResultSet th
11、eResult; /读取的数据 ResultSetMetaData theMetaData; /数据库命令执行后,返回结果信息 String theDataSource;/包含了被访问数据库或者数据源的名称, 用URL形式表示 String theUser; /数据库的用户名 String thePassword; /数据库的密码,public void AccessDB() openConnection(); /打开数据库连接 execSQLCommand(select * from table1); /从数据库中读取内容 closeConnection(); /关闭已经打开的数据库 pub
12、lic void openConnection() ,theDataSource=jdbc:odbc:AccessDB; theUser=; thePassword=; try /装载JDBC-ODBC驱动程序 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); /如果采用Visual J+6.0调试,请改为下面的语句 /Class.forName(com.ms.jdbc.odbc.JdbcOdbcDriver); theConnection=DriverManager.getConnection(theDataSource,theUser,thePass
13、word); System.out.println(Connect:OK); catch (Exception e) handleException(e); public void execSQLCommand(String command) try,theStatement=theConnection.createStatement(); theResult=theStatement.executeQuery(command); theMetaData=theResult.getMetaData (); int columnCount=theMetaData.getColumnCount (
14、); System.out.println(Column Count:+columnCount); while(theResult.next () for(int i =1;i=columnCount;i+) String colValue=theResult.getString(i);,if(colValue=null)colValue=; System.out.print(colValue+;); System.out.println(); catch(Exception e) handleException(e); ,public void closeConnection() try t
15、heConnection.close (); catch(Exception e) handleException(e); public void handleException(Exception e) ,System.out.println(e.getMessage (); e.printStackTrace (); if(e instanceof SQLException) while(e=(SQLException)e).getNextException ()!=null) System.out.println(e); ,9.2.2 一般步骤 一般来讲,使用JDBC开发数据库应用可分为
16、下面几个步骤: (1) 装载驱动程序; (2) 建立与数据库的连接; (3) 发送SQL语句; (4) 处理结果; (5) 关闭数据库连接。 下面结合程序9.1具体介绍每个步骤的实现方法。,1装载驱动程序 装载驱动程序非常简单,只需要一行代码。例如,装载JDBC-ODBC桥驱动程序,可以用下列代码: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); JdbcOdbcDriver为JDBC-ODBC桥驱动程序的类名,sun.jdbc.odbc为该类所在的包。微软的Java虚拟机与Sun公司提供的标准虚拟机有所不同,它提供了自己的JDBC-ODBC桥驱动程序com.ms.jdbc.odbc.JdbcOdbcDriver,可用下面的语句装载该驱动程序:,Class.forName(com.ms.jdbc.odbc.JdbcOdbcDriv